如何根据模式拆分字节数组?

时间:2014-06-16 14:55:04

标签: java arrays stream byte

我需要在包含二进制文件数据的套接字上传输字节。我想在流的开头有一个文件名及其大小,所以在接收点我可以提取它们。

如何根据目的地的预定义模式将字节数组分成三个部分?

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

1 个答案:

答案 0 :(得分:1)

潜在的解决方案是在传输中使用一些元数据,例如文件名/大小的字节长度。传输结构可能如下:

| num_bytes_in_file_name | num_bytes_in_size_of_file | filename_in_bytes .... | size_in_bytes ... | data ... |

跟踪字节数的目的是找到索引间隔。字节数组的第一个值为您提供文件名的长度,第二个值为文件大小。然后,索引2到2 + num_bytes_in_file_name包含文件名,2 + num_bytes_in_file_name到2 + num_bytes_in_file_name + num_bytes_in_size_of_file将包含文件的大小,除此之外的所有内容都是数据。

例如:

指数:[0] [1] [2] [3] [4] [5] [6 -...]

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

然后你知道名字的间隔为[2-4],大小是之后的第一个值[5],超出[6 -...]的所有内容都是数据。