1
嘗試從服務器讀取一些圖像文件,並使用同樣的套接字編程。當文件不可用時,InputStream在讀取時拋出SocketTimeOutException
但是,當沒有文件存在時,我得到了socketTimeOut異常。不僅是失去與服務器的連接。
當沒有文件存在時,如何避免丟失與服務器的連接。
InputStream inputStream = new BufferedInputStream(socket().getInputStream());
int i = -1;
while ((i = bufferedInputStream.read()) != -1) {
byteArrayOutputStream.write(i);
}
在上面的代碼中,當我調用bufferedInputStream的read()時,我收到異常。我如何處理這個異常並丟失與服務器的連接。
謝謝
這篇文章幫助我瞭解我在哪裏以及爲什麼會遇到異常。謝謝。 – Upendra 2012-07-27 22:10:56
正如你所說的,如果連接沒有關閉或在異常之後處理,我們應該處理流的清理。如果我們不關閉流,那麼會有一個綁定到套接字的流。如果我們關閉套接字,它會在內部關閉與該套接字關聯的流。我的Java技能非常差。請糾正我錯在哪裏。 – Upendra 2012-07-27 22:41:14
@Upendra你在說什麼?我說'處理溪流清潔'沒有任何內容。不要關閉任何東西,只要記下超時時間,或許可以算出來,然後重試。當你得到太多的超時,或者read()返回-1,或者你得到一個不同的IOException時,關閉套接字,或者更好的是輸出流(如果有的話)。關閉套接字會關閉它的流,反之亦然。 – EJP 2012-07-27 22:48:14