是否有人知道在比特级有效的序列化库(沿着协议缓冲区)?我需要通过非常昂贵的链路(租用卫星)传输字节,我们需要尽可能多地打包这些字节以降低成本。
例如,我们忽略对齐:在已知值的范围(例如0-128)的情况下,我们将其打包为7位,并将剩余的位用于需要打包的下一个值。我们仅使用我们需要的信息打包DateTime值,而不是其他任何东西(例如删除年份和秒,并将结果打包成20位)。从消息中删除两个字节计数。
目前我们所有的邮件都是手工制作的,这很容易出错。是否存在类似于协议缓冲区的东西,可以打包位域并在C和C#中生成代码?我知道boost的dynamic_bitset,但这不是C#的易耗品(很容易)。在我继续按照this question的答案编写一个图书馆之前,我们可以考虑采用另一种方法吗?
答案 0 :(得分:1)
在这种情况下,我建议您花时间计算数据集并制作自定义解决方案。我的推理如下。
如果您选择现成的东西,您将运行由其他人维护的良好,稳定的代码,您将对代码重用感到满意并将在截止日期前完成。但是,如果此代码不适合您的特定需求(除非您真的很幸运),您将无法使用自定义解决方案尽可能多地保存自己。特别是因为您似乎已经看到了一种方法来避免发送冗余信息(即日期时间戳中的年份)。
一旦您知道要发送的内容并删除接收者可以从您的消息中猜测或推断的所有信息,那么您可以应用压缩。我会推荐一种压缩方法,我已经看了几个月了,Arithmetic Coding。您可以通过Michael Dipperstein here找到实现,但可能需要一些工作才能将其插入到您的解决方案中。可以找到一个非常好的算法描述here in this pdf。
我给你链接而不是一些C#代码的原因是我怀疑,因为你提到了一个卫星链接,你正在处理嵌入式系统,而你可能用C或C ++进行编码。 / p>
请注意我的算术编码建议意味着我建议你在这里做很多工作。
但是,我的假设是你真的需要提高效率。通过压缩,效率来自于了解您的数据集并为其自定义算法。如果您使用稍微低效的方法就可以了,那么有更多的Genric算法......