[英]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.