我必须解码包含文件片段的套接字传输:
data %filekey% [3:%piece3% 5:%piece5% 7:%piece7% 8:%piece8% 9:%piece9%]
%pieceN%
包含文件的第 N 个二进制片段- 碎片的长度已知
%filekey%
已知- 索引已知(但顺序可能不正确)
- 除了片段之外的所有内容都是 ASCII
- 此消息以回车符结束 (
\n
)。 - 此“协议(protocol)”无法更改。
我面临两个问题:
- 我可以从我的
InputStream
中提取该行,寻找\n
。但是,如果%pieceN%
中的一个字节还包含回车符怎么办? - 要分割每个部分及其相应的索引,我必须找到
N:
。就像我之前的问题:如果%pieceN%
包含:
会怎样?
最佳答案
既然你知道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
来指示它们实际读取的字节数。您可能需要在循环中调用它们以确保填充字节数组。)不必担心搜索 \n
。
关于java - 在套接字传输中将 ASCII 与二进制分开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9485098/