Was ist der richtige Weg, um Daten von io.Reader direkt in Zielbytes.Buffer in Golang zu kopieren?

WBOY
Freigeben: 2024-02-05 21:36:08
nach vorne
767 Leute haben es durchsucht

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

Frageninhalt

Ich habe Code, der Daten von einem io.Reader direkt in eine bytes.Buffer-Struktur kopieren möchte, die als Cache im Speicher gehalten werden soll. Jetzt rufe ich einfach io.Copy(dstBytesBuffer, reader) auf. Aber wenn man sich den io.Copy-Code ansieht, sieht es so aus, als würde er selbst einen Puffer erstellen, die Daten vom Reader in diesen Puffer kopieren und dann aus diesem Puffer in meinen dstBytesBuffer schreiben. Gibt es eine Möglichkeit, es zu überspringen und direkt vom Reader in meinen Zielpuffer zu kopieren? io.Copy(dstBytesBuffer, reader)。但查看 io.Copy 代码,它看起来像是在创建一个缓冲区本身,并将数据从读取器复制到该缓冲区中,然后从该缓冲区写入我的 dstBytesBuffer。有没有办法跳过它,直接将其从阅读器复制到我的目标缓冲区?


正确答案


使用 io.Copy() 就可以了。 io.Copy()

Richtige Antwort

Verwenden Sie io. Copy() wird den Zweck erfüllen. io.Copy() ist für mehrere Anwendungsfälle „optimiert“. Zitieren der Dokumentation:

Kopieren Sie von src nach dst, bis src EOF erreicht oder ein Fehler auftritt. Es gibt die Anzahl der kopierten Bytes und den ersten Fehler zurück, der beim Kopieren aufgetreten ist (falls vorhanden).

Erfolgreiches Kopieren gibt err == nil zurück, nicht err == EOF. Da Copy so definiert ist, dass es von src bis EOF liest, wird EOF in Read nicht als zu meldender Fehler behandelt.

Wenn src die WriterTo-Schnittstelle implementiert, wird das Kopieren durch Aufrufen von src.WriteTo(dst) erreicht. Andernfalls, wenn dst die ReaderFrom-Schnittstelle implementiert, wird das Kopieren durch Aufrufen von dst.ReadFrom(src) erreicht. io.Reader,即使它没有提供一个高效的 p​​hpcncphpcnWriteTo(dst) 方法,我们肯定知道你的目的地是 bytes.Buffer 并且它实现io.ReaderFrom 因为它有一个 Buffer.ReadFrom() 方法从给定的 io.Reader

Ohne Kenntnis der Quelle🎜🎜 Lesen, ohne zusätzliche Puffer zu erstellen oder zu verwenden. 🎜

Das obige ist der detaillierte Inhalt vonWas ist der richtige Weg, um Daten von io.Reader direkt in Zielbytes.Buffer in Golang zu kopieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage