我有程式碼想要將資料從io.Reader 直接複製到bytes.Buffer 結構,該結構旨在作為快取保留在內存中。現在我只是呼叫 io.Copy(dstBytesBuffer, reader)
。但查看 io.Copy 程式碼,它看起來像是在創建一個緩衝區本身,並將資料從讀取器複製到該緩衝區中,然後從該緩衝區寫入我的 dstBytesBuffer。有沒有辦法跳過它,直接將其從閱讀器複製到我的目標緩衝區?
使用 io.Copy()
就可以了。 io.Copy()
針對多個用例進行了「最佳化」。引用其文件:
將副本從 src 複製到 dst,直到 src 達到 EOF 或發生錯誤。它會傳回複製的位元組數以及複製時遇到的第一個錯誤(如果有)。
成功的複製返回 err == nil,而不是 err == EOF。因為 Copy 被定義為從 src 讀取直到 EOF,所以它不會將 Read 中的 EOF 視為要報告的錯誤。
如果src實作了WriterTo接口,則透過呼叫src.WriteTo(dst)來實現複製。否則,如果dst實作了ReaderFrom接口,則透過呼叫dst.ReadFrom(src)來實作複製。
不了解來源的任何資訊io.Reader
,即使它沒有提供一個高效的phpcncphpcnWriteTo(dst) 方法,我們肯定知道你的目的地是bytes.Buffer
並且它實作io.ReaderFrom
因為它有一個Buffer.ReadFrom()
方法從給定的io.Reader
讀取而不建立或使用額外的緩衝區。
以上是將資料從 io.Reader 直接複製到 golang 中的目標 bytes.Buffer 的正確方法是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!