Golang でのバッファへの任意のバイトの読み取り
ストリームからバッファへのデータの読み取りでは、任意のバイト数の読み取りが必要になる場合があります。たとえば、接続からデータを読み取り、それをハンドラーに渡す必要があるシナリオを考えてみましょう。
一般的なアプローチには、固定サイズのバッファを作成し、Read() メソッドを使用することが含まれます。
<code class="go">buf := make([]byte, 256) for { n, err := conn.Read(buf) fmt.Println(string(buf)) if err != nil || n == 0 { return } Handle(buf[:n]) }</code>
この解決策は多くの場合に機能しますが、ストリームにバッファーを満たすのに十分なバイトがない場合には問題が発生する可能性があります。これに対処するには、次の解決策を使用できます。
<code class="go">var b bytes.Buffer if _, err := io.Copy(&b, conn); err != nil { return err } Handle(b.Bytes())</code>
このアプローチでは、ストリーム全体をバイト バッファに読み取る io.Copy() 関数を利用します。その後、バイトを取得してハンドラーに渡すことができます。これにより、特定の時点で利用可能なバイト数に関係なく、ストリーム全体を確実に読み取ることができます。
以上がGolang で任意のバイトをバッファに読み取る方法: 可変データ ストリームを効率的に処理するには?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。