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 중국어 웹사이트의 기타 관련 기사를 참조하세요!