
Golang의 바이트 버퍼에서 정수 값 추출
Go의 바이트 버퍼에서 다양한 필드를 추출하는 기술이 필요합니다. bytes.Buffer 및 명시적 오프셋을 사용하는 현재 접근 방식이 이를 효과적으로 달성하지만 고려해야 할 잠재적인 개선 사항이 있습니다.
바이트 건너뛰기를 사용한 대안
다중 생성을 제거하려면 버퍼의 경우 bytes.Buffer.Next()를 사용할 수 있습니다. 방법:
1 2 3 4 5 6 7 8 9 10 11 12 13 | 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)
}
|
로그인 후 복사
구조 기반 읽기
대체 접근 방식은 헤더 구조를 만들고 바이너리를 사용하는 것입니다.직접 읽기:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | type Head struct {
InodeCount uint32
BlockCount uint32
FirstBlock uint32
BlockSize uint32
BlocksPerGroup uint32
InodesPerBlock uint32
}
func readSB(buf []byte) {
var header Head
if err := binary.Read(bytes.NewReader(buf), binary.LittleEndian, &header); err != nil {
log.Fatal(err)
}
}
|
로그인 후 복사
위 내용은 Go의 바이트 버퍼에서 정수 값을 효율적으로 추출하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!