我需要能够分隔二进制数据流。我正在考虑使用诸如 ASCII EOT(传输结束)字符之类的东西来执行此操作。
但是我有点担心 - 我如何确定用于此的特定二进制序列 (0b00000100) 不会出现在我自己的二进制序列中,从而在定界上给出误报?
换句话说,如何最好地处理二进制定界?
编辑:...不使用长度 header 。抱歉各位,之前应该提到这一点。
最佳答案
您有五个选择:
- 使用不太可能出现的分隔符。这存在您猜测错误的风险。我不推荐这种方法。
- 使用分隔符和 escape sequence包括分隔符。您可能需要将转义字符加倍,具体取决于什么使解析更容易。 (想想 C
\0
在某些内容中包含 ASCII NUL。) - 使用您可以确定不会出现的分隔符短语。 (想想mime message boundaries。)
- 在前面添加某种长度字段,以便您知道将接下来的 N 个字节作为数据读取。这样做的缺点是要求您在写入数据之前知道这个长度,而这有时很困难或不可能。
- 使用更复杂的东西,例如 ASN.1 ,为您完整描述所有您的内容。 (我不知道我是否真的会推荐这个,除非你能很好使用它——ASN.1在最好的情况下使用起来很尴尬,但它确实允许完全明确的二进制文件数据解释。)
关于networking - 定界二进制序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8541766/