>  기사  >  백엔드 개발  >  io.Reader의 데이터를 golang의 대상 bytes.Buffer로 직접 복사하는 올바른 방법은 무엇입니까?

io.Reader의 데이터를 golang의 대상 bytes.Buffer로 직접 복사하는 올바른 방법은 무엇입니까?

WBOY
WBOY앞으로
2024-02-05 21:36:08723검색

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

질문 내용

io.Reader의 데이터를 메모리에 캐시로 보관할 bytes.Buffer 구조로 직접 복사하려는 코드가 있습니다. 이제 io.Copy(dstBytesBuffer, reader)를 호출하면 됩니다. 하지만 io.Copy 코드를 보면 버퍼 자체를 생성하고 판독기의 데이터를 해당 버퍼에 복사한 다음 해당 버퍼에서 내 dstBytesBuffer에 쓰는 것처럼 보입니다. 이를 건너뛰고 리더에서 대상 버퍼로 직접 복사할 수 있는 방법이 있습니까? io.Copy(dstBytesBuffer, reader)。但查看 io.Copy 代码,它看起来像是在创建一个缓冲区本身,并将数据从读取器复制到该缓冲区中,然后从该缓冲区写入我的 dstBytesBuffer。有没有办法跳过它,直接将其从阅读器复制到我的目标缓冲区?


正确答案


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

정답

io를 사용하세요. Copy()가 트릭을 수행합니다. io.Copy()는 다양한 사용 사례에 "최적화"되었습니다. 해당 문서를 인용하려면:

src가 EOF에 도달하거나 오류가 발생할 때까지 src에서 dst로 복사하세요. 복사된 바이트 수와 복사하는 동안 발생한 첫 번째 오류(있는 경우)를 반환합니다.

성공적인 복사는 err == EOF가 아닌 err == nil을 반환합니다. Copy는 src부터 EOF까지 읽도록 정의되어 있으므로 Read의 EOF를 보고할 오류로 처리하지 않습니다.

src가 WriterTo 인터페이스를 구현하는 경우 src.WriteTo(dst)를 호출하여 복사가 이루어집니다. 그렇지 않고 dst가 ReaderFrom 인터페이스를 구현하는 경우 dst.ReadFrom(src)을 호출하여 복사가 이루어집니다. io.Reader,即使它没有提供一个高效的 p​​hpcncphpcnWriteTo(dst) 方法,我们肯定知道你的目的地是 bytes.Buffer 并且它实现io.ReaderFrom 因为它有一个 Buffer.ReadFrom() 方法从给定的 io.Reader

원본에 대한 지식 없이🎜🎜 추가 버퍼 생성이나 사용 없이 읽으세요. 🎜

위 내용은 io.Reader의 데이터를 golang의 대상 bytes.Buffer로 직접 복사하는 올바른 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 stackoverflow.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제