Go で接続から任意のバイトを読み取る際のバッファーの保持
データのストリームを接続から読み取る必要がある状況などチャンクで処理されると、さまざまなストリーム長の処理と任意のバイト数への対応という共通の課題が生じます。
接続からのデータの読み取りと処理に 256 バイトのバッファーが使用される次のコード スニペットを考えてみましょう。
buf := make([]byte, 256) for { n, err := conn.Read(buf) fmt.Println(string(buf)) if err != nil || n== 0 { return } Handle(buf[:n]) }
このアプローチは、十分なバイトが利用可能な場合にはうまく機能しますが、ストリームが終了すると問題が発生し、読み取り可能なバイト数が 256 バイト未満になります。このシナリオを適切に処理するには、代替ソリューションが必要です。
1 つのアプローチは、bytes.Buffer を利用することです。これは、接続から受信したデータを収集する便利な方法を提供します。 bytes.Buffer を活用することで、データの完全なストリームを蓄積し、1 回の操作で目的のハンドラーに渡すことができます。
var b bytes.Buffer if _, err := io.Copy(&b, conn); err != nil { return err } Handle(b.Bytes())
この実装では、Handle 関数はデータのストリーム全体を単一の操作として受け取ります。
このアプローチを採用することで、開発者は、接続から受信したデータの整合性を維持しながら、必要なバッファ サイズを維持しながら、任意の長さのストリームを効果的に処理できます。
>以上がGoで接続から任意のバイトを読み取るときにバッファサイズを保持する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。