在套接字传输中将ASCII与二进制分开

时间:2012-02-28 15:48:29

标签: java inputstream

我必须解码包含文件片段的套接字传输:

data %filekey% [3:%piece3% 5:%piece5% 7:%piece7% 8:%piece8% 9:%piece9%]
  • %pieceN%包含文件的第N个二进制文件
  • 已知碎片的长度
  • %filekey%已知
  • 索引是已知的(但可能不是正确的顺序)
  • 除了棋子之外的一切都是ASCII
  • 此消息以回车符(\n)结束。
  • 此“协议”无法更改。

我面临两个问题:

  • 我可以从InputStream中提取该行,查找\n。但是,如果来自%pieceN%的字节还包含回车符怎么办?
  • 要分割每个部分及其相应的索引,我必须找到N:。就像我之前的问题一样:如果%pieceN%包含:
  • ,该怎么办?

1 个答案:

答案 0 :(得分:1)

由于你知道data %filekey% [3:%piece3% 5:%piece5% 7:%piece7% 8:%piece8% 9:%piece9%]的每个部分的长度 - 你知道空格的数量,你知道%filekey%是什么,你知道每个%pieceN%的长度等等 - 这意味着您知道data %filekey% [3:%piece3% 5:%piece5% 7:%piece7% 8:%piece8% 9:%piece9%]的全长,因此您只需使用java.io.InputStream.read(byte[]).read(byte[], int, int)来读取所需的确切字节数。 (注意那些方法都返回int以指示它们实际读取的字节数。您可能需要在循环中调用它们以确保填充字节数组。)不要担心搜索{ {1}}。