当前位置 : 主页 > 大数据 > 区块链 >

protocol-buffers – 协议缓冲区 – 重复布尔值的最佳实践

来源:互联网 收集:自由互联 发布时间:2021-06-22
我需要通过相对较慢(低至1Kb / s)的连接传输一些数据.我已经读过Googles协议缓冲区的编码是有效的. 这对于我的大部分数据都是正确的,但不适用于布尔值,特别是如果它是重复的字段. 问
我需要通过相对较慢(低至1Kb / s)的连接传输一些数据.我已经读过Googles协议缓冲区的编码是有效的.
这对于我的大部分数据都是正确的,但不适用于布尔值,特别是如果它是重复的字段.
问题是我必须每50毫秒传输一个指定数量(15)的布尔值,除了其他数据. Protobuf将每个布尔值编码为一个字节用于字段ID,一个字节用于布尔值(0x00或0x01),这导致15个字节的数据用于15个布尔值.

所以我现在正在寻找一种更好的编码方法.有人还有这个问题吗?在这种情况下达到有效编码的最佳做法是什么?

我的想法是使用编号数据类型(uint32)并手动编码数据,每个bool一位整数.关于这个想法的任何反馈?

在Protobuf中,最好的办法是使用整数位域.如果您有超过64位,请使用字节字段(并手动打包).

请注意,Cap’n Proto将布尔值(在结构和列表中)打包为单个位,因此可能值得一看.

但是,如果您受带宽限制,最好开发自己的自定义协议.大多数这些序列化框架为了易于使用而牺牲了一点空间(特别是在处理版本偏斜时),但如果你的情况,那么仅关注尺寸可能更重要.只包含一些位的自定义消息格式应该很容易维护,并且可以根据需要紧密打包.

(披露:我是Cap’n Proto的作者,以及Google的大部分开源Protobuf代码.)

网友评论