Y3 快速和低 CPU 损耗的编解码器开源项目

我要开发同款
匿名用户2021年10月21日
103阅读
开发技术GO语言
所属分类Google Go、解压缩、压缩、应用工具
授权协议Apache-2.0

作品详情

Y3是一种 YoMoCodec 的Golang实现,它描述了个快速和低CPU损耗的编解码器,专注于边缘计算和流处理。

查看explainer获取更多信息,了解更多与 YoMo 组合的方式。

Y3Codec查看 Y3CodecSPEC

测试gotest./...使用goget-ugithub.com/yomorun/y3-codec-golang编码例子packagemainimport("fmt"y3"github.com/yomorun/y3-codec-golang")funcmain(){//ifwewanttorepesent`varobj=&foo{ID:-1,bar:&bar{Name:"C"}}`//inY3-Codec://0x81->nodevarfoo=y3.NewNodePacketEncoder(0x01)//0x02->foo.ID=-11varyp1=y3.NewPrimitivePacketEncoder(0x02)yp1.SetInt32Value(-1)foo.AddPrimitivePacket(yp1)//0x83->&bar{}varbar=y3.NewNodePacketEncoder(0x03)//0x04->bar.Name="C"varyp2=y3.NewPrimitivePacketEncoder(0x04)yp2.SetStringValue("C")bar.AddPrimitivePacket(yp2)//->foo.bar=&barfoo.AddNodePacket(bar)fmt.Printf("res=%#v",foo.Encode())//res=[]byte{0x81,0x08,0x02,0x01,0x7F,0x83,0x03,0x04,0x01,0x43}}解码例子1:解码一个原始数据包packagemainimport("fmt"y3"github.com/yomorun/y3-codec-golang")funcmain(){fmt.Println(">>Parsing[0x0A,0x01,0x7F],whichlikeKey-Valueformat=0x0A:127")buf:=[]byte{0x0A,0x01,0x7F}res,_,err:=y3.DecodePrimitivePacket(buf)v1,err:=res.ToUInt32()iferr!=nil{panic(err)}fmt.Printf("TagKey=[%#X],Value=%v\\n",res.SeqID(),v1)}解码例子2:解码一个节点数据包packagemainimport("fmt"y3"github.com/yomorun/y3-codec-golang")funcmain(){fmt.Println(">>Parsing[0x84,0x06,0x0A,0x01,0x7F,0x0B,0x01,0x43]EQUALSJSON=0x84:{0x0A:-1,0x0B:'C'}")buf:=[]byte{0x84,0x06,0x0A,0x01,0x7F,0x0B,0x01,0x43}res,_,err:=y3.DecodeNodePacket(buf)v1:=res.PrimitivePackets[0]p1,err:=v1.ToInt32()iferr!=nil{panic(err)}fmt.Printf("TagKey=[%#X.%#X],Value=%v\\n",res.SeqID(),v1.SeqID(),p1)v2:=res.PrimitivePackets[1]p2,err:=v2.ToUTF8String()iferr!=nil{panic(err)}fmt.Printf("TagKey=[%#X.%#X],Value=%v\\n",res.SeqID(),v2.SeqID(),p2)}性能与JSON的性能比较:yomo-y3-stress-testing与ProtoBuffer的性能比较:y3-protobuf-testing
声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论