Rumah > Artikel > pembangunan bahagian belakang > Apakah cara yang betul untuk menyalin data daripada io.Reader terus ke bait sasaran.Buffer dalam golang?
Saya mempunyai kod yang ingin menyalin data daripada io.Pembaca terus ke bait.Struktur penimbal, yang bertujuan untuk disimpan dalam ingatan sebagai cache. Sekarang saya hanya memanggil io.Copy(dstBytesBuffer, reader)
. Tetapi melihat pada kod io.Copy, ia kelihatan seperti mencipta penimbal itu sendiri, menyalin data daripada pembaca ke dalam penimbal itu, dan kemudian menulis daripada penimbal itu ke dstBytesBuffer saya. Adakah terdapat cara untuk melangkau dan menyalinnya terus daripada pembaca ke penimbal destinasi saya? io.Copy(dstBytesBuffer, reader)
。但查看 io.Copy 代码,它看起来像是在创建一个缓冲区本身,并将数据从读取器复制到该缓冲区中,然后从该缓冲区写入我的 dstBytesBuffer。有没有办法跳过它,直接将其从阅读器复制到我的目标缓冲区?
使用 io.Copy()
就可以了。 io.Copy()
io. Copy()
akan berjaya. io.Copy()
"dioptimumkan" untuk berbilang kes penggunaan. Memetik dokumentasinya: Salin dari src ke dst sehingga src mencapai EOF atau ralat berlaku. Ia mengembalikan bilangan bait yang disalin dan ralat pertama yang ditemui semasa menyalin (jika ada).
Salinan yang berjaya dikembalikan err == nil, bukan err == EOF. Oleh kerana Salin ditakrifkan untuk membaca dari src hingga EOF, ia tidak menganggap EOF dalam Baca sebagai ralat untuk dilaporkan.
Jika src melaksanakan antara muka WriterTo, penyalinan dicapai dengan memanggil src.WriteTo(dst). Jika tidak, jika dst melaksanakan antara muka ReaderFrom, penyalinan dicapai dengan memanggil dst.ReadFrom(src). io.Reader
,即使它没有提供一个高效的 phpcncphpcnWriteTo(dst) 方法,我们肯定知道你的目的地是 bytes.Buffer
并且它实现io.ReaderFrom
因为它有一个 Buffer.ReadFrom()
方法从给定的 io.Reader
Atas ialah kandungan terperinci Apakah cara yang betul untuk menyalin data daripada io.Reader terus ke bait sasaran.Buffer dalam golang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!