[英]Reading 4 bytes from InputStreamReader
我有一个问题。 我正在Java中的一个简单的多线程TCP服务器上工作,目前有这个问题:
客户可以向我发送输入字符串,例如
[IDENTIFIER]文字\\ r \\ n
没关系,我已经完成了。 除一种情况外,每个输入查询都必须以\\ r \\ n结尾。
这种情况是客户端将图像作为二进制数据发送时。 该消息具有以下结构:
照片[空间] [数据长度] [空间] [数据] [BIG ENDIAN中的校验和的4个字节]
关键是要返回一个
202 OKAY \\ r \\ n
当校验和与数据中的位总和匹配时显示的消息,或者...
302错误的支票\\ r \\ n
... 除此以外。 但是,读取4个字节时遇到一些严重问题。 输入源是InputStreamReader的实例,该实例从以下来源获取:
in = new InputStreamReader(this.clientSocket.getInputStream());
函数InputStreamReader.read()返回一个刚刚读取的char的int值。 现在,我试图
correctChecksumBytes = new byte[4];
for( int i = 0 ; i < 4 ; ++i ) {
correctChecksumBytes[i] = (byte) in.read();
}
if (correctChecksumBytes == null) {
throw new BadSyntax();
}
bb = ByteBuffer.wrap(correctChecksumBytes);
bb.order(ByteOrder.BIG_ENDIAN);
fourByteCheck = bb.getInt();
但是,我现在明白,强制转换in.read()返回的int是错误的,因为结果相差很大。 我被认为是ByteBuffer的用法是正确的,我只是不知道如何用正确的值填充字节数组。
我也尝试将InputSreamReader转换为字节数组,但是我发现这不是有效的方法,因为出现一条消息...
照片[空格] [数据长度] [空格] [数据] [BIG ENDIAN中的校验和的4个字节] [IDENTIFIER]文字\\ r \\ n
...有效,需要解释为2条消息。
我做了一些测试,发现我成功地读取了所有数据并计算了有效的校验和,因此输入中的下4个字节是校验和的4个字节,但我还没有设法读取。
另外,这是有效的PHOTO消息的示例
照片8 ABCDEFGH \\ x00 \\ x00 \\ x02 \\ x24
因此,我想问一下,如何读取这4个字节并将其转换为int以与计算的校验和进行比较?
非常感谢
InputStreamReader将读取基于字符的数据。 您必须编写自定义InputStream并从中读取x字节。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.