Apakah cara yang betul untuk menyalin data daripada io.Reader terus ke bait sasaran.Buffer dalam golang?

WBOY
Lepaskan: 2024-02-05 21:36:08
ke hadapan
767 orang telah melayarinya

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

Kandungan soalan

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()

Jawapan betul

Gunakan 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,即使它没有提供一个高效的 p​​hpcncphpcnWriteTo(dst) 方法,我们肯定知道你的目的地是 bytes.Buffer 并且它实现io.ReaderFrom 因为它有一个 Buffer.ReadFrom() 方法从给定的 io.Reader

Tanpa sebarang pengetahuan tentang sumbernya🎜🎜 Baca tanpa mencipta atau menggunakan penimbal tambahan. 🎜

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan