ホームページ >バックエンド開発 >Golang >Golang で任意のバイトをバッファに読み取る方法: 可変データ ストリームを効率的に処理するには?

Golang で任意のバイトをバッファに読み取る方法: 可変データ ストリームを効率的に処理するには?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-10-27 08:09:31511ブラウズ

How to Read Arbitrary Bytes into a Buffer in Golang: Efficiently Handling Variable Data Streams?

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 サイトの他の関連記事を参照してください。

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