ホームページ >バックエンド開発 >Golang >Golang で可変長データを効率的にバッファリングするにはどうすればよいですか?

Golang で可変長データを効率的にバッファリングするにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-26 12:43:031090ブラウズ

How to Efficiently Buffer Variable-Length Data in Golang?

Golang での可変長データのバッファリング

可変長の受信データを処理するためにバッファーが必要なシナリオでは、次のアプローチが示されています。質問では固定サイズのバッファを使用しているため、読み取りが非効率になる可能性があります。次の改良されたソリューションを検討してください。

<code class="go">import (
    "bytes"
    "fmt"
    "io"
)

func readVariableLengthData(conn io.Reader) ([]byte, error) {
    buf := new(bytes.Buffer)

    if _, err := io.Copy(buf, conn); err != nil {
        return nil, err
    }

    return buf.Bytes(), nil
}</code>

このソリューションは bytes.Buffer を利用し、必要に応じてバッファーを動的に拡張できます。この改良されたアプローチの仕組みは次のとおりです。

  1. bytes.Buffer を作成します。bytes.Buffer は増加するバイトのスライスを保持できるため、新しいデータが書き込まれるときにバッファーを拡張できます。
  2. Use io.Copy: io.Copy 関数は、接続リーダー (conn) から bytes.Buffer.
  3. にデータを効率的にコピーします。バッファのバイトを返す: ストリームが完全に読み取られると、バッファに格納されているバイトのコピーを返します。

この改訂されたアプローチを使用すると、可変長データを処理できます。未使用のバッファ領域でメモリを無駄にすることなく、正常にストリーミングします。

以上がGolang で可変長データを効率的にバッファリングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。