binary包

binary包实现了简单的数字与字节序列的转换以及变长值的编解码

数字翻译为定长值来读写,一个定长值,要么是固定长度的数字类型(int8, uint8, int16, float32, complex64, …)或者只包含定长值的结构体或者数组。

变长值是使用一到多个字节编码整数的方法,绝对值较小的数字会占用较少的字节数。详情请参见:http://code.google.com/apis/protocolbuffers/docs/encoding.html。

本包相对于效率更注重简单。如果需要高效的序列化,特别是数据结构较复杂的,请参见更高级的解决方法,例如encoding/gob包,或者采用协议缓存。

Constants
const (
    MaxVarintLen16 = 3
    MaxVarintLen32 = 5
    MaxVarintLen64 = 10
)

变长编码N位整数的最大字节数。

Variables
var BigEndian bigEndian

大端字节序的实现。

var LittleEndian littleEndian

小端字节序的实现。

type ByteOrder
type ByteOrder interface {
    Uint16([]byte) uint16
    Uint32([]byte) uint32
    Uint64([]byte) uint64
    PutUint16([]byte, uint16)
    PutUint32([]byte, uint32)
    PutUint64([]byte, uint64)
    String() string
}

ByteOrder规定了如何将字节序列和 16、32或64比特的无符号整数互相转化。

func Size
func Size(v interface{}) int

返回v编码后会占用多少字节,注意v必须是定长值、定长值的切片、定长值的指针。

func Uvarint
func Uvarint(buf []byte) (uint64, int)

从buf解码一个uint64,返回该数字和读取的字节长度,如果发生了错误,该数字为0而读取长度n返回值的意思是:

	n == 0: buf不完整,太短了
	n  < 0: 值太大了,64比特装不下(溢出),-n为读取的字节数
func Varint
func Varint(buf []byte) (int64, int)

从buf解码一个int64,返回该数字和读取的字节长度,如果发生了错误,该数字为0而读取长度n返回值的意思是:

n == 0: buf不完整,太短了
n  < 0: 值太大了,64比特装不下(溢出),-n为读取的字节数
func ReadUvarint
func ReadUvarint(r io.ByteReader) (uint64, error)

从r读取一个编码后的无符号整数,并返回该整数。

func ReadVarint
func ReadVarint(r io.ByteReader) (int64, error)

从r读取一个编码后的有符号整数,并返回该整数。

func PutUvarint
func PutUvarint(buf []byte, x uint64) int

将一个uint64数字编码写入buf并返回写入的长度,如果buf太小,则会panic。

func PutVarint
func PutVarint(buf []byte, x int64) int

将一个int64数字编码写入buf并返回写入的长度,如果buf太小,则会panic。

func Read
func Read(r io.Reader, order ByteOrder, data interface{}) error

从r中读取binary编码的数据并赋给data,data必须是一个指向定长值的指针或者定长值的切片。从r读取的字节使用order指定的字节序解码并写入data的字段里当写入结构体是,名字中有’_'的字段会被跳过,这些字段可用于填充(内存空间)。

Example
func Write
func Write(w io.Writer, order ByteOrder, data interface{}) error

将data的binary编码格式写入w,data必须是定长值、定长值的切片、定长值的指针。order指定写入数据的字节序,写入结构体时,名字中有’_'的字段会置为0。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值