接続を介してデータ ストリームを操作するシナリオでは、任意の量のデータを処理する必要がある場合があります。この記事では、Golang を使用してストリーム終了条件を適切に処理しながらバッファーを保持する方法を説明します。
データ ストリームを処理する場合、各読み取り操作で結果が得られるかどうかは保証できません。固定バイト数。これにより、指定したバッファーに、ストリームの最後に実際に読み取られるバイト数を超えるデータが含まれる可能性があります。
この問題に対処するには、受け入れられた回答io.Copy 関数を利用することを提案します。以下は、提供されたコード スニペットの拡張バージョンです。
package main import ( "bytes" "fmt" "io" "net" ) func main() { // Assuming a TCP connection conn, err := net.Dial("tcp", "localhost:8080") if err != nil { // Error handling omitted } var b bytes.Buffer _, err = io.Copy(&b, conn) if err != nil { // Error handling omitted } // Process the entire data stream Handle(b.Bytes()) }
io.Copy 関数は、引数として 2 つの io.Reader を受け取ります。この場合、最初の io.Reader は接続 (conn) で、2 番目の io.Reader は bytes.Buffer (b) です。 io.Copy は conn から読み取り、conn が EOF (ファイルの終わり) に達するまで b に書き込みます。これにより、バッファ b に接続からのデータ ストリーム全体が確実に含まれるようになります。
io.Copy 関数を利用すると、データを操作するときにストリーム終了条件を適切に処理できます。ストリーム。このアプローチにより、データの整合性とストリーム終了のシームレスな処理を確保しながら、任意の量のデータを管理できます。
以上がGolang でバッファを使用して任意のデータ ストリームを処理するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。