- 主题:处理二进制json的方案
目前想到的最好的方案(跨语言交互,例如 cpp <-> python):
把所有的数据视为 字节数组的数组 用msgpack编码, [0]放消息类型, [1]放json5, [2]以后是二进制数据;
可以很容易手动C++编码解码, python也可以按msgpack的标准来处理, 仅使用 msgpack 的子集, 0xC4-C6 表示二进制串, 0x90-0x9F \xdc \xdd 表示数组;
msgpack.loads(b'\x93\xc5\x00\x05login\xc5\x00\x13{user:"a",pass:"b"}\xc5\x00
\x03\x00\x01\x02')
得到 [b'login', b'{user:"a",pass:"b"}', b'\x00\x01\x02']
其他编码方式要么太复杂(pickle 对 b'' 输出15字节), 要么太大(b*64方案133%)
--
修改:ABCDEFGHJKLM FROM 103.216.43.*
FROM 103.216.43.*
bson不就行了?
【 在 ABCDEFGHJKLM 的大作中提到: 】
: 目前想到的最好的方案(跨语言交互,例如 cpp <-> python):
: 把所有的数据视为 字节数组的数组, 然后 [0]放消息类型, [1]放json5, [2]以后是二进制数据;
: 可以很容易手动C++编码解码, python也可以按msgpack的标准来处理
: ...................
--
FROM 123.120.108.*
bson太复杂,不用库处理不了, 而且不是人类可读的,
json5几乎是完美的, 只缺二进制数据, 通过最简洁可读的msgpack包一层, 解决二进制问题
比如json5支持注释
【 在 wincss 的大作中提到: 】
bson不就行了?
【 在 ABCDEFGHJKLM 的大作中提到: 】
: 目前想到的最好的方案(跨语言交互,例如 cpp <-> python):
: 把所有的数据视为 字节数组的数组, 然后 [0]放消息类型, [1]放json5, [2]以后是二进制数据;
: 可以很容易手动C++编码解码, python也可以按msgpack的标准来处理
: ...................
--
修改:ABCDEFGHJKLM FROM 103.216.43.*
FROM 103.216.43.*
什么是二进制JSON?
【 在 ABCDEFGHJKLM 的大作中提到: 】
:
: 目前想到的最好的方案(跨语言交互,例如 cpp <-> python):
:
: 把所有的数据视为 字节数组的数组 用msgpack编码, [0]放消息类型, [1]放json5, [2]以后是二进制数据;
:
#发自zSMTH@CDU.MP
--
FROM 113.143.105.*
了解下protocol buffer?
【 在 ABCDEFGHJKLM 的大作中提到: 】
: 目前想到的最好的方案(跨语言交互,例如 cpp <-> python):
: 把所有的数据视为 字节数组的数组 用msgpack编码, [0]放消息类型, [1]放json5, [2]以后是二进制数据;
: 可以很容易手动C++编码解码, python也可以按msgpack的标准来处理, 仅使用 msgpack 的子集, 0xC4-C6 表示二进制串, 0x90-0x9F \xdc \xdd 表示数组;
: ...................
--
FROM 59.175.68.*
protobuf 二进制可读性太差, 费半天劲所能节省的也不过是keyname而不是value,把keyname定的简洁一些就行(protobuf严重的过度设计,protobuf3 删了一些,稍微好点)
凡是跟json功能重叠的二进制编码都是浪费.
把 json5utf8bytes 跟图像语音之类bytes一起作为 byte[][] 编码进 messagepack 是最简洁的, 而且没有重复设计(只采用messagepack的子集, 只对byte[][]编解码)
只用ptotobuf的byte[][]编码比messagepack麻烦一点(varInt可读性差), 而且repeated的设计不给消息结尾(messagepack数组有长度), 还得另外处理消息分包问题
要性能就直接底层传C结构定义,用c代码作为schema, 要糙快猛就直接json, 夹在中间不上不下的二进制json都会被逐渐抛弃
【 在 dgiij 的大作中提到: 】
了解下protocol buffer?
【 在 ABCDEFGHJKLM 的大作中提到: 】
: 目前想到的最好的方案(跨语言交互,例如 cpp <-> python):
: 把所有的数据视为 字节数组的数组 用msgpack编码, [0]放消息类型, [1]放json5, [2]以后是二进制数据;
: 可以很容易手动C++编码解码, python也可以按msgpack的标准来处理, 仅使用 msgpack 的子集, 0xC4-C6 表示二进制串, 0x90-0x9F \xdc \xdd 表示数组;
: ...................
--
修改:ABCDEFGHJKLM FROM 114.253.35.*
FROM 114.253.35.*
二进制为啥需要可读性?
【 在 ABCDEFGHJKLM 的大作中提到: 】
: protobuf 二进制可读性太差, 费半天劲所能节省的也不过是keyname而不是value,把keyname定的简洁一些就行(protobuf严重的过度设计,protobuf3 删了一些,稍微好点)
: 凡是跟json功能重叠的二进制编码都是浪费.
: 把 json5utf8bytes 跟图像语音之类bytes一起作为 byte[][] 编码进 messagepack 是最简洁的, 而且没有重复设计(只采用messagepack的子集, 只对byte[][]编解码)
: ...................
--
FROM 58.135.83.*
有很多二进制编辑器查看器, 说明有需求
【 在 dyingsun 的大作中提到: 】
二进制为啥需要可读性?
【 在 ABCDEFGHJKLM 的大作中提到: 】
: protobuf 二进制可读性太差, 费半天劲所能节省的也不过是keyname而不是value,把keyname定的简洁一些就行(protobuf严重的过度设计,protobuf3 删了一些,稍微好点)
: 凡是跟json功能重叠的二进制编码都是浪费.
: 把 json5utf8bytes 跟图像语音之类bytes一起作为 byte[][] 编码进 messagepack 是最简洁的, 而且没有重复设计(只采用messagepack的子集, 只对byte[][]编解码)
: ...................
--
FROM 114.253.35.*