amino编码

2019-08-08  本文已影响0人  zjubfd

amino 编码

amino是Proto3的子集同时扩展了接口的支持。

  1. 和json对比,二进制序列化效率更高。
  2. 和Proto3比较,虽然有oneof的关键字,但是在高级语言里不能自动左实现和接口的转换。
type Codec struct {
    mtx              sync.RWMutex
    sealed           bool
    typeInfos        map[reflect.Type]*TypeInfo
    interfaceInfos   []*TypeInfo
    concreteInfos    []*TypeInfo
    disfixToTypeInfo map[DisfixBytes]*TypeInfo
    nameToTypeInfo   map[string]*TypeInfo
}

这是一个codec的结构,包含了注册的接口,注册的实现信息。

在序列化时,首先binary包用普通的方法对struct和值类型进行二进制化,最后添加四个字节prefix前缀。为了避免prefix冲突,如果一个interface同一个prefix有多个实现,还会在prefix的前面添加disamb字节以消除不确定性。

缺点

  1. amino一个很大的好处是不需要写proto文件了,缺点目前还不能跨平台。
  2. 不支持枚举,浮点型和map。实际上这个对区块链应用不是什么缺点,区块链应用为了确定性,也不会选择使用浮点型和map,而枚举类型可以用byte数组代替。
上一篇 下一篇

猜你喜欢

热点阅读