[英]sending negative bytes with tcp
我通过TCP连接发送一个字节,当我发送一个负数(例如本例中的-30
)时,我得到三个字节:
客户端:
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())));
out.write((byte)-30);
out.flush();
out.close();
服务器端:
is = new DataInputStream(clientSocket.getInputStream());
is.readFully(bbb);
for (int i=0;i<bbb.length;i++)
System.out.println(i+":"+bbb[i]);
我得到的是:
0:-17
1:-65
2:-94
但我只寄了-30
您正在使用Writer.write(int)
,并且正在调用Writer.write(int)
:
写一个字符。 给定整数值的16个低位包含在要写入的字符中。 16个高位被忽略。
因此,您已经转换为int
,然后采用该int
16位。 因此,您实际上是以平台默认编码(似乎为UTF-8)编写Unicode字符65506( U + FFE2 )。 这不是你想要写什么,但是这是你在写什么。
如果只想写入二进制数据,则根本不应该使用Writer
。 只需使用OutputStream
如果需要,可以将其包装在DataOutputStream
,但不要使用Writer
。 Writer
类用于文本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.