我需要从给定的网址下载文件,但问题是我可以获取没有扩展名的文件。 为了弄清楚扩展是什么,我写了以下服务:
public String getExtension(String imageURL){
InputStream stream = new URL(imageURL).openStream();
ImageInputStream iis = ImageIO.createImageInputStream(stream);
Iterator<ImageReader> iter = ImageIO.getImageReaders(iis);
ImageReader reader = imageReaders.next();
String retVal = reader.getFormatName();
closeInputStreamAndDisposeReader(reader);
return retVal;
}
稍后我需要下载该图片,所以我写道:
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方法来获取它,然后使用{{1}会工作的。
我是对的吗?
我该怎么做 - 我试图使用ImageIO.setUseCache(false);
,但我得到了一个例外:
ImageIO.createImageInputStream(imageURL);
那么,我该怎么做?
感谢。
答案 0 :(得分:1)
我过去所做的是使用Map
支持的缓存,它基本上将URL作为File
引用的关键字作为值。
基本上我要做的是通过URL从缓存中请求Image
。如果图像已经下载(并且它满足一些其他要求),它将返回文件系统上存在的图像,否则,它将下载并放入缓存中。
您可以扩展这个想法,但提供isCached(URL)
和getFile(URL)
甚至getInputStream(URL)
或getReader(URL)
或者您需要的内容