我需要在包含二进制文件数据的套接字上传输字节。我想在流的开头有一个文件名及其大小,所以在接收点我可以提取它们。
如何根据目的地的预定义模式将字节数组分成三个部分?
| String as byte | Integer as byte | byte
| Filename | Size | data
答案 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 -...]的所有内容都是数据。