Java 如何基于模式拆分字节数组?

Java 如何基于模式拆分字节数组?,java,arrays,stream,byte,Java,Arrays,Stream,Byte,我需要通过包含二进制文件数据的套接字来传输字节。我希望在流的开头有一个文件名和大小的列表,以便在接收点提取它们 如何根据目标位置的预定义模式将字节数组分为三部分 | String as byte | Integer as byte | byte | Filename | Size | data 一个可能的解决方案是在传输中包含一些元数据,例如文件名的长度/大小(以字节为单位)。变速箱的结构可能如下所示: |num_bytes_in_file_name

我需要通过包含二进制文件数据的套接字来传输字节。我希望在流的开头有一个文件名和大小的列表,以便在接收点提取它们

如何根据目标位置的预定义模式将字节数组分为三部分

| String as byte | Integer as byte | byte
| Filename       | Size            | data     

一个可能的解决方案是在传输中包含一些元数据,例如文件名的长度/大小(以字节为单位)。变速箱的结构可能如下所示:

|num_bytes_in_file_name | num_bytes_in_size_of|u file | filename _in_bytes…| size_in_bytes…|数据|

跟踪字节数的目的是为了找到索引间隔。字节数组的第一个值给出文件名的长度,第二个值给出文件的大小。然后,索引2到文件名中的2+num\u bytes\u包含文件名,文件名中的2+num\u bytes\u到文件名中的2+num\u bytes\u+num\u bytes\u包含文件大小,超出的所有内容都是数据

例如:

索引:[0][1][2][3][4][5][6-…]

    |(3)|(1)|'c'|'a'|'t'|10|(data)|

然后您知道名称的间隔为[2-4],大小是[5]之后的第一个值,[6-…]之外的所有内容都是数据。

您如何判断文件名的结尾?它是以null结尾的还是固定大小的?与文件大小相同您是否只发送长度不超过255的文件,或者数字文件大小可能需要多个字节?@JeffBowman,我正在考虑使用
namestart[Filename]nameend
模式。谢谢!在你的问题中加入这个细节会有所帮助。不过,添加这些类型的标记确实会让您陷入转义的困境,否则您可能无法表示与标记类似的文件名,而以“filename length”开头的标记可能更为健壮。