Go でバイト バッファから整数値を効率的にアンパックする方法
バイナリ データ ストリームからさまざまなフィールドを抽出することは、Go で一般的なタスクになる可能性があります。プログラミング。 Go では、bytes パッケージは、バイト バッファーの読み取りと操作のためのメソッドを提供します。
質問:
どのようにすれば、バイト バッファーから複数の整数フィールドを読み取り、アンパックできますか?明示的なフィールド オフセットを維持し、冗長なバッファを最小限に抑えながら、より効率的な方法で割り当ては?
答え:
ここでは 2 つのアプローチがあります:
1. bytes.Buffer.Next() を使用した不要なバイトのスキップ:
フィールドごとに新しいバッファーを作成する代わりに、bytes.Buffer.Next() メソッドを使用して不要なバイトをスキップできます。このアプローチにより、メモリ割り当てが回避され、読み取りプロセスが合理化されます:
p := bytes.NewBuffer(buf) // ... p.Next(12) // Skip [8:20) binary.Read(p, binary.LittleEndian, &fs.sb.firstDataBlock) // ...
2.構造体を使用してヘッダーを直接読み取る:
このメソッドにより、バッファー操作を繰り返す必要がなくなります。ヘッダー レイアウトを表す構造体を定義し、binary.Read():
type Head struct { // Field definitions } var header Head err := binary.Read(file, binary.LittleEndian, &header)
を使用してバッファから直接読み取ることができます。どちらのアプローチでも、Go のバイト バッファから整数値を解凍するための効率的かつ信頼性の高い方法が提供されます。指定された要件を満たしています。
以上がGo Byte バッファから複数の整数フィールドを効率的に解凍するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。