java我会从来自socket的inputStream获得格式错误的输入吗?
我正在尝试连接WebSocket(目前正在使用chrome扩展)。我收到数据后就开始工作了。当我试图转换从输入流接收的整数时,我得到的是完全其他的值。在下面的例子中,我输入了单词测试。那么,我是做错了什么,还是我把输入理解错了
代码:
@Override
public void run() {
while (true) {
try {
if(client.getInputStream().read() != -1) {
int i = client.getInputStream().read();
System.out.println("Integer: " + i);
byte b = (byte) i;
System.out.println("Byte: " + b);
char c = (char) b;
System.out.println("Char: " + c);
System.out.println("-=-=-=-=-=-=-=-=-=-=-=-");
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
输出:
# 1 楼答案
java流返回字节,而read返回int,因此可以得到-1。因此,如果您的服务器正在发送一个int,那么您需要读取该int的所有字节并创建它
你有两种方法。创建一个字节[]并将其用作缓冲区,或者如果您正在接收32位2补整数,则可以使用DataInputStream
使用缓冲区的示例
或者可以使用DataInputStream
缓冲区版本使用与java的DataInput.readInt相同的转换,我将其作为一个例子。此外,还需要进行一些额外的检查。即使缓冲区长度为4字节,也可以读取1到4字节的任何内容