2012-02-06 286 views
1

我想要製作一個服務器,通過Java中的newtork接收JPG圖像。ImageIO何時應該停止從InputStream讀取?

isr = socket.getInputStream(); 
BufferedImage img = ImageIO.read(isr); 

我想完成閱讀,但保持套接字連接。 ImageIO僅在關閉連接時停止。當我發送兩次相同的圖像時,它也會停止。

+0

請重新提問。我不明白這個問題 – Adrian 2012-02-06 21:53:56

+0

我想保持連接。 – 2012-02-06 22:17:57

回答

-1

ImageIO.read應該繼續從輸入流讀取,直到它具有整個文件,此時它將停止讀取。然後調用者有責任在輸入流上調用close。

您不會將任何數據從客戶端發送到服務器,告訴它您已完成閱讀。只需關閉連接。

如果服務器發送兩次相同的圖像,或發送兩個不同的圖像,則必須建立兩個套接字連接,或使用其他方法讀取數據。據我所知,ImageIO.read無法讀取兩張圖像。

+0

錯誤。 ImageIO創建InputStream來讀取圖像。它管理緩存等,並關閉inputStream。調用者無法關閉輸入流。 – llappall 2012-02-09 20:55:33

+0

@llappall我正在談論ImageIO.read(InputStream),這是OP在問題中引用的函數。它不創建InputStream:它作爲參數傳入。並且引用Java文檔,「在讀取操作完成後,此方法不會關閉提供的InputStream;如果需要,調用者有責任關閉流。」也許你在想如果ImageIO.read(URL)。我想我應該澄清我所指的函數名的哪些重載版本,但有時你必須閱讀這個問題才能理解答案。 – Jay 2012-02-10 22:10:13

+0

呵呵,從這個問題看來ImageIO.read(URL)在這種情況下不起作用。他沒有一個URL開始 - 他有一個插座。問題中沒有指定插槽的位置。 – Jay 2012-02-10 22:13:38