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