我需要從給定的URL下載文件,但事情是我可以得到沒有擴展名的文件。 爲了弄清楚擴展名是什麼,我寫了下面的服務:使用ImageIO靜態方法緩存
後來我需要下載圖片,因此我這樣寫道:
BufferedImage image = ImageIO.read(imageURL);
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
ImageIO.write(image, extension, byteArrayOutputStream);
byteArrayOutputStream.flush();
byte[] imageInBytes = byteArrayOutputStream.toByteArray();
byteArrayOutputStream.close();
的問題是,我下載過該文件兩次 - 我想使用緩存,以防止這種情況。現在我讀了ImageIO.setUseCache(false);
,但似乎沒有工作(也許我在這裏做錯了什麼)。
編輯: 我注意到,我創建使用new URL(imageURL).openStream()
輸入流 - 這是我做的第一次下載,我認爲我應該使用的方法的ImageIO一個拿到,然後ImageIO.setUseCache(false);
會起作用。
我對不對?
我如何能做到這一點 - 我試圖用ImageIO.createImageInputStream(imageURL);
,但我有一個例外:
java.lang.IllegalArgumentException: input == null!
at javax.imageio.ImageIO.createImageInputStream(Unknown Source)
那麼,我該怎麼辦呢?
謝謝。
做,後來從中讀取上?或者讓'image'成爲一個實例字段? – Raffaele 2012-08-06 08:56:18
我需要從給定的URL獲取inputStream並在稍後對其進行讀取 – Noam 2012-08-06 09:19:59
嘗試'ImageIO.createImageInputStream(imageURL.openStream())'。我認爲一旦你做完了這些,緩存「應該」適用於你,因爲從我讀過的內容中可以看出它適用於'ImageInput/OutputStream' – MadProgrammer 2012-08-06 09:29:52