Golang でバイト バッファから整数値を抽出する
Go でバイト バッファからさまざまなフィールドを抽出するにはテクニックが必要です。 bytes.Buffer と明示的なオフセットを使用する現在のアプローチはこれを効果的に達成していますが、考慮すべき改善点がいくつかあります。
バイト スキッピングを使用した代替手段
複数のバイトの作成を排除するにはバッファの場合は、 bytes.Buffer.Next() を使用できます。メソッド:
func readSB(buf []byte) { p := bytes.NewBuffer(buf) binary.Read(p, binary.LittleEndian, &fs.sb.inodeCount) binary.Read(p, binary.LittleEndian, &fs.sb.blockCount) p.Next(12) binary.Read(p, binary.LittleEndian, &fs.sb.firstDataBlock) binary.Read(p, binary.LittleEndian, &fs.sb.blockSize) p.Next(4) binary.Read(p, binary.LittleEndian, &fs.sb.blockPerGroup) p.Next(4) binary.Read(p, binary.LittleEndian, &fs.sb.inodePerBlock) }
構造ベースの読み取り
別のアプローチは、ヘッダー構造を作成し、バイナリを使用することです。直接読み取ります:
type Head struct { InodeCount uint32 // 0:4 BlockCount uint32 // 4:8 // Skip fields FirstBlock uint32 // 20:24 BlockSize uint32 // 24:28 // Skip fields BlocksPerGroup uint32 // 32:36 // Skip fields InodesPerBlock uint32 // 40:44 } func readSB(buf []byte) { var header Head if err := binary.Read(bytes.NewReader(buf), binary.LittleEndian, &header); err != nil { log.Fatal(err) } // Access data using header fields }
以上がGo でバイト バッファから整数値を効率的に抽出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。