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

WBOY
풀어 주다: 2024-02-05 21:36:08
앞으로
767명이 탐색했습니다.

将数据从 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으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿