有人可以向我解釋爲什麼這個工作正常,但in.available()> 0註釋掉了,但是當我把它放回去時呢?BufferedInputStream表示它不可用,但無論如何工作
mySocket = new Socket("blahblah", 12345);
BufferedInputStream in = new BufferedInputStream(mySocket.getInputStream());
....
char result[] = new char[length];
for (int i = 0; i < length && !mySocket.isClosed() /*&& in.available()>0*/; i++){
result[i] = (char)in.read();
}
更具體地說:我正在做一個Android應用程序,用戶可以在搜索項,該搜索被髮送到星際一些啄,我回來XML形式的結果,做的東西他們。當我返回的xml足夠小時(請參閱上面的代碼中的「length」),代碼在in.available()> 0左側時工作得很好。但是如果長度很大,則in.available()返回0。但有了這個評論,所有事情都可以繼續順利進行。
這是爲什麼?這是我需要擔心和解決的問題嗎?
您還應該刪除isClosed()測試。它不符合你的想法:它只會告訴你是否自己關閉了套接字。這不是EOS測試:read()返回-1告訴你。如果你自己關閉了套接字,那麼你首先不應該接近這個代碼。 – EJP 2012-07-13 17:57:48