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 ?

Quelle est la bonne façon de copier les données de io.Reader directement vers la cible bytes.Buffer dans Golang ?

WBOY
WBOYavant
2024-02-05 21:36:08764parcourir

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

Contenu de la question

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

Bonne réponse

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

Sans aucune connaissance de la source🎜🎜 Lisez sans créer ni utiliser de tampons supplémentaires. 🎜

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer