首頁  >  文章  >  後端開發  >  將資料從 io.Reader 直接複製到 golang 中的目標 bytes.Buffer 的正確方法是什麼?

將資料從 io.Reader 直接複製到 golang 中的目標 bytes.Buffer 的正確方法是什麼?

WBOY
WBOY轉載
2024-02-05 21:36:08766瀏覽

将数据从 io.Reader 直接复制到 golang 中的目标 bytes.Buffer 的正确方法是什么?

問題內容

我有程式碼想要將資料從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中文網其他相關文章!

陳述:
本文轉載於:stackoverflow.com。如有侵權,請聯絡admin@php.cn刪除