从 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中文网其他相关文章!