c# - c#中长度前缀二进制流的优雅恢复
问题描述
所以我正在考虑将二进制“消息”写入磁盘。目前我选择在“消息”的开头加上前缀长度,所以我可以很容易地说从流中读取 x 字节然后反序列化它等等。
这是一个特殊情况,我希望能够继续阅读过去的消息,这些消息无法解析和恢复序列中进一步存在的任何消息。
在研究按字节序列分隔二进制数据的方法时,似乎通常不建议这样做(因为序列总是有可能在流中自然发生),但是有长度头前缀,我不确定你怎么能如果您不只是在读取某个魔术序列然后读取下一个长度等之前,则从流中恢复读取记录。
我正在专门研究 c# 和 protobuf,但它似乎是一个更笼统的话题。
关于如何可靠地用字节序列定界或从长度与写入磁盘的内容不匹配的损坏数据包中恢复的任何建议?
解决方案
所有音频格式都使用帧同步(您的魔术序列)+ 长度标头 + CRC 检查,因此音频解码器可以从损坏的流中恢复。您应该在 protobuf 反序列化器之前执行相同的操作。
推荐阅读
- postgresql - 无法使用 Postgres 9.2 安装任何语言
- rest - 使用应用程序成功订阅 Microsoft 图形通知后,我没有收到任何通知
- ionic-framework - 无法按顺序获得 highcharts 图例标签
- javascript - JavaScript this 是原型方法内部的全局对象
- java - 获取 nosuchmethod 异常
- sas - 在proc sql宏中动态排除列名
- react-native - 为什么部署和调试如此缓慢(React-Native)
- postgresql - 在 PL/pgSQL 中按不同类别进行高性能 KNN 搜索
- go - 使用反射比较结构字段
- c# - 是否可以在方法参数中使用变量名和布尔值?