データを io.Reader から bytes.Buffer 構造に直接コピーしたいコードがあります。メモリ内のキャッシュ。ここで、io.Copy(dstBytesBuffer, Reader)
を呼び出すだけです。しかし、io.Copy コードを見ると、バッファ自体を作成し、リーダーからのデータをそのバッファにコピーし、そのバッファから dstBytesBuffer に書き込んでいるように見えます。それをスキップしてリーダーから宛先バッファに直接コピーする方法はありますか?
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) を呼び出すことによって行われます。
sourceio.Reader
については何もわかりません。たとえ効率的な phppcncphpcnWriteTo(dst) メソッドが提供されなかったとしても、私たちはあなたが何をしているのかを間違いなく知っています。ベースは bytes.Buffer
で、Buffer があるため
io.ReaderFrom を実装します。 .ReadFrom()
メソッドは、追加のバッファを作成または使用せずに、指定された io.Reader
から読み取ります。
以上がgolangでio.Readerからターゲットbytes.Bufferにデータを直接コピーする正しい方法は何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。