簡體   English   中英

用TCP發送負字節

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM