[英]java socket DataInputStream
我有一個多線程程序 java java socket,我收到了奇怪的信息。 像這樣的
public void run()
{
try {
byte[] bs = new byte[64];
// read data into buffer
dataReception.read(bs);
// for each byte in the buffer
for (byte b:bs)
{
// convert byte into character
char c = (char)b;
// print the character
System.out.print(c);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
問題在這里:
// read data into buffer
dataReception.read(bs);
Read 不會准確讀取您想要在該數組中包含的字節數。 它可以讀取任意數量的字節。 因此,您必須始終檢查讀取操作的返回值; 並且只有當所有預期的字節都被讀取時......你應該繼續!
您的輸出看起來像垃圾的原因不是因為您會收到特殊字符。
發生的事情是:
這可以通過在讀取之前打印您的數組來驗證。 您將看到僅包含那些“特殊”字符。
如果您期望正好是 64 個字節,請使用readFully()
而不是read(),
或者至少注意它的返回值。
嘗試:
public void run()
{
try {
byte[] bs = new byte[64];
// read data into buffer
int readed = dataReception.read(bs);
// for each byte in the buffer
for (int n=0; n<readed;n++)
{
byte b=bs[n];
// convert byte into character
char c = (char)b;
// print the character
System.out.print(c);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
DataInputStream 通常用於需要通過套接字共享文本信息時。 如果使用 DataOutputStream.writeUTF(String str) 從另一端發送傳輸的數據,則使用 DataInputStream.readUTF() 方法。 DataInputStream 和 DataOutputStream 在發送實際數據之前發送兩個字節(無符號)長度的數據。
final String data = din.readUTF();
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.