接手一项目实时数据传输协议用的jeson,个人觉得jeson协议使用就是方便,然后
jeson数据序列二进制后比较谷歌protobuf要大一半左右。
之前和同事聊天时protobuf 对可变长类型字节压缩
对于 int32 类型的数字,一般需要 4 个字节 来表示;
但采用 Varint 方法,对于很小的 Int32 类型 数字(小于256),则可以用 1个字节 来表示
jeson 数据解析时,每个key 对应值 toString 转换处理 会造成过多垃圾
例如:jd[“type”].ToString()
jeson 格式定好后,客户端要写一个类或结构体 其属性 要和jeson的key一模一样
例如
服务端 jeson 格式 :
{“datas”: {“type”:”1”,”num”:10}}//注意 key 对应的vaule如果没有加双引号jeson解析对象会解释为int
unity 客户端 定义一个结构体
例如 :
public struct TestJeson
{
public string type;
public int num;//对应jeson key num (int类型)
}
客户端拿到数据后需要进行对jeson解析为对象
TestJeson testJeson=JsonMapper.ToObject<TestJeson>(jd["datas"].ToJson());
这里unity 用LitJeson插件。
值得说明的是:
unity在通信大的情况下 对jeson进行解析处理不好会造成mono暴涨,非常可怕,将jeson数据全部用tostring ,而不用转成对象 。
1.tostring 在大量数据解析情况下mono飞快的涨到400+
2.转对象后,mono维持在20左右
本文对比了JSON与Protobuf两种数据传输格式的特点。讨论了JSON的便捷性与Protobuf的高效性,特别是在小整数使用Varint编码时的优势。同时指出了在Unity中大量解析JSON可能导致内存消耗激增的问题。
318

被折叠的 条评论
为什么被折叠?



