是否有一些字节组合可以用作Int16流的分隔符

时间:2015-03-17 16:36:15

标签: stream language-agnostic byte separator

我被赋予了指定应用程序内部使用的文件格式的任务。

其中一项预期要求是:

  

文件的数据部分应由一系列Int16类型的值(短整数)组成,由一个或多个字节的适当组合分隔。

据我所知,Int16可以包含任何单字节值,所以我不知道如何选择一些保证不会偶然出现的字节序列一条小溪。有这样的序列吗?

(而且,如果答案是"没有",那么确定文件中每个流的位置和大小的好方法是什么?)

2 个答案:

答案 0 :(得分:2)

通过“流”,我假设请求表明在开始写入数据时长度未知。

因此,我建议使用“chunked”编码,其中每个子流被分成可变大小的片段,每个片段的长度在开头写为固定大小的整数。空块表示子流的结束。通常,块的最大长度将有助于分配缓冲区以进行有效的读写。

这是在HTTP "chunked" transfer encoding之后进行模式化的,并且在许多其他格式中使用了类似的方法,例如basic encoding rules for ASN.1.支持的不定长度编码

答案 1 :(得分:1)

我建议为每个流添加一个长度字段,而不是尝试使用分隔符,因为你已经给出了(没有合适的唯一分隔符)。 E.g:

<length>
<stream>
<length>
<stream>
<length>
<stream>
...

其中<length>是一个4字节的整数,它定义了后续流中16位元素的数量。