大佬教程收集整理的这篇文章主要介绍了如何在Golang的字节缓冲区中解压缩各种形式的整数?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
func (fs *FileSystem) readSB() { // fs.f is a *os.File buf := make([]byte,1024) fs.f.ReadAt(buf,1024) // Offset: type var p *bytes.buffer // 0: uint32 p = bytes.NewBuffer(buf[0:]) binary.Read(p,binary.LittleEndian,&fs.sb.inodeCount) // 4: uint32 p = bytes.NewBuffer(buf[4:]) binary.Read(p,&fs.sb.blockCount) // 20: uint32 p = bytes.NewBuffer(buf[20:]) binary.Read(p,&fs.sb.firstDataBlock) // 24: uint32 p = bytes.NewBuffer(buf[24:]) binary.Read(p,&fs.sb.blockSizE) fs.sb.blockSize = 1024 << fs.sb.blockSize // 32: uint32 p = bytes.NewBuffer(buf[32:]) binary.Read(p,&fs.sb.blockPerGroup) // 40: uint32 p = bytes.NewBuffer(buf[40:]) binary.Read(p,&fs.sb.inodePerBlock) }
有没有更好的/惯用的/直接的方法来做到这一点?
>我想保持偏移显式
>我想从字节缓冲区读取,尽可能不寻求和从文件中读取。
.Next()
创建一个新的缓冲区来跳过不想读取的字节:
{ // Offset: type p := bytes.NewBuffer(buf) // 0: uint32 binary.Read(p,&fs.sb.inodeCount) // 4: uint32 binary.Read(p,&fs.sb.blockCount) // Skip [8:20) p.Next(12) // 20: uint32 binary.Read(p,&fs.sb.firstDataBlock) // 24: uint32 binary.Read(p,&fs.sb.blockSizE) fs.sb.blockSize = 1024 << fs.sb.blockSize // Skip [28:32) p.Next(4) // 32: uint32 binary.Read(p,&fs.sb.blockPerGroup) // Skip [36:40) p.Next(4) // 40: uint32 binary.Read(p,&fs.sb.inodePerBlock) }
或者您可以避免通过chunk读取块,并创建一个头文件结构,您可以直接使用binary.Read读取:
type Head struct { InodeCount uint32 // 0:4 BlockCount uint32 // 4:8 UnkNown1 uint32 // 8:12 UnkNown2 uint32 // 12:16 UnkNown3 uint32 // 16:20 FirstBlock uint32 // 20:24 BlockSize uint32 // 24:28 UnkNown4 uint32 // 28:32 BlocksPerGroup uint32 // 32:36 UnkNown5 uint32 // 36:40 InodesPerBlock uint32 // 40:44 } func main() { var header Head err = binary.Read(file,&header) if err != nil { log.Fatal(err) } log.Printf("%#v\n",header) }
以上是大佬教程为你收集整理的如何在Golang的字节缓冲区中解压缩各种形式的整数?全部内容,希望文章能够帮你解决如何在Golang的字节缓冲区中解压缩各种形式的整数?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。