美文网首页
amino编码

amino编码

作者: zjubfd | 来源:发表于2019-08-08 19:37 被阅读0次

    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的结构,包含了注册的接口,注册的实现信息。

    • 注册接口时,会遍历所有的具体实现,看是否实现了该接口,如果实现了,会添加到自己的TypesInfo中,TypesInfo维护了 Implementers map[PrefixBytes][]*TypeInfo
    • 注册实现时,会遍历所有的接口,如果实现了该接口,会添加到对应接口的实现列表里。自身会根据注册的名称生成一个prefix,和disamb数字。(hash生成)

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

    缺点

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

    相关文章

      网友评论

          本文标题:amino编码

          本文链接:https://www.haomeiwen.com/subject/aaefjctx.html