2014-01-26 71 views
0

Sever的代碼inputStream.read()讀取錯誤的布爾值

   if(success){ 
        out.write("true".getBytes().length); 
        out.write("true".getBytes()); 
        out.flush(); 
       } 
       else{ 
        out.write("false".getBytes().length); 
        out.write("false".getBytes()); 
        out.flush(); 
       } 

客戶端代碼

 int size = inputStream.read(); 
     byte[] buf = new byte[size]; 
     inputStream.read(buf); 
     ns = new String(buf); 
     Boolean.valueOf(ns); 

雖然服務器將結果發送客戶端讀錯。這裏有什麼問題?我該如何解決它。作爲示例服務器發送值爲true,但客戶端將其作爲虛假接收它

+3

「讀錯」 並沒有給我們任何* *信息。假設所有字符串都是<256字節,對數據進行兩次編碼,假設只有一次調用read(byte []),那麼在這裏出現了各種各樣的錯誤,比如使用平臺默認編碼。 '會讀取所有數據等。考慮使用'DataOutputStream'來代替... –

回答

1

您需要逐步介紹您在做什麼。很明顯,發送布爾值的最簡單方法就像這樣一個單獨的字節。

out.write(success ? 1 : 0); 

和閱讀這一點,你會怎麼做

boolean success = in.read() != 0; 

但是,如果你需要發送一個字符串,我會檢查你正在閱讀的字符串和正確的長度是多少,因爲沒有任何二進制協議可能失敗的原因數量,例如因爲你之前讀/寫的東西是不正確的。

+0

感謝隊友問題解決 –

0

服務器和客戶端可能使用不同的字符集。

在兩側都使用明確的一個(並且相同)。

看到http://docs.oracle.com/javase/6/docs/api/java/lang/String.html

public byte[] getBytes(String charsetName) 
      throws UnsupportedEncodingException 

public String(byte[] bytes, 
      String charsetName) 
    throws UnsupportedEncodingException