Maison > Article > développement back-end > Quelle est la bonne façon de copier les données de io.Reader directement vers la cible bytes.Buffer dans Golang ?
J'ai du code qui souhaite copier les données d'un io.Reader directement vers une structure bytes.Buffer, qui est destinée à être conservée en mémoire sous forme de cache. Maintenant, j'appelle simplement io.Copy(dstBytesBuffer, reader)
. Mais en regardant le code io.Copy, il semble qu'il crée lui-même un tampon, copiant les données du lecteur dans ce tampon, puis écrivant à partir de ce tampon dans mon dstBytesBuffer. Existe-t-il un moyen de l'ignorer et de le copier directement du lecteur vers mon tampon de destination ? io.Copy(dstBytesBuffer, reader)
。但查看 io.Copy 代码,它看起来像是在创建一个缓冲区本身,并将数据从读取器复制到该缓冲区中,然后从该缓冲区写入我的 dstBytesBuffer。有没有办法跳过它,直接将其从阅读器复制到我的目标缓冲区?
使用 io.Copy()
就可以了。 io.Copy()
io. Copy()
fera l'affaire. io.Copy()
est "optimisé" pour plusieurs cas d'utilisation. Citant sa documentation : Copier de src vers dst jusqu'à ce que src atteigne EOF ou qu'une erreur se produise. Il renvoie le nombre d'octets copiés et la première erreur rencontrée lors de la copie (le cas échéant).
Une copie réussie renvoie err == nil, pas err == EOF. Étant donné que Copy est défini pour lire depuis src jusqu'à EOF, il ne traite pas EOF dans Read comme une erreur à signaler.
Si src implémente l'interface WriterTo, la copie est réalisée en appelant src.WriteTo(dst). Sinon, si dst implémente l'interface ReaderFrom, la copie est réalisée en appelant dst.ReadFrom(src). io.Reader
,即使它没有提供一个高效的 phpcncphpcnWriteTo(dst) 方法,我们肯定知道你的目的地是 bytes.Buffer
并且它实现io.ReaderFrom
因为它有一个 Buffer.ReadFrom()
方法从给定的 io.Reader
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!