2011-10-11 116 views
0

天兒真好,我工作的一個代理,但套接字的InputStream的一個正在奇怪:Java:InputStream.read不等待輸入?

while(true) { 
     try { 
      while ((BytesRead = inputstream.read(Line)) != -1) { 
       OtherSocket.Write(Line, BytesRead); 
      } 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

我有幾乎同樣的事情爲OtherSocket,但就這一個,它不斷重複就好像服務器不斷髮送數據一樣,我在猜測inputstream.read(Line)不是等待輸入,而是返回-1。 inputstream.read(Line)不會等待輸入,因爲它意味着什麼?

+0

這真的是Java嗎? 'OtherSocket'是一個自定義類嗎? – home

+0

如果此代碼是Java,則它使用單一寫作風格,這使得很難理解代碼。 – migu

回答

1

我相信InputStream.read會在另一端關閉套接字後繼續返回-1

爲什麼要繼續嘗試從已從read返回-1的流讀取數據?這似乎是我的錯誤。如果你想保留while(true)循環,你應該在while循環後面放置一個break;語句,這樣如果你剛剛設法正常​​結束流,沒有問題,你可以退出外循環。

順便說一下,我強烈懷疑在流失敗後嘗試讀取流是一個糟糕的主意。

(我還建議你開始下面更傳統的Java命名 - 這是很奇怪地看到PascalCase變量名稱,可也奇怪地看到一個方法稱爲Write - 這當然不是對java.io.OutputStream東西...)

+0

關於Jon的回答,你沒有向我們展示你正在使用的InputStream的實現。每個人都可以定義EOF條件。我們需要了解具體的實施情況,以獲得更多幫助。 – Thom

+0

這樣做,謝謝你的幫助。 – user940982