有没有办法清除InputStream缓存

时间:2018-12-18 11:29:00

标签: java inputstream bufferedimage

我们正在使用InputStreams从外部URL读取图像,问题是图像在外部服务器中不断变化,但是保持相同的URL 。 有时,即使在对外部服务器中的映像进行版本控制后,更改也不会出现在我们这边。

调试此简单代码行时:

InputStream inputStream = new URL(srcURL).openStream();

我发现输入流仍然返回媒体的旧版本。即使通过浏览器访问相同的 srcURL 也会给出图像的新版本。

我认为是因为我们之前没有关闭inputStream。 但是现在,即使更正了此问题/重新启动了应用程序,我们仍然可以获得旧版本。

inputStream是否使用某种内存缓存? 你能告诉我我们在做什么错吗?

谢谢。

1 个答案:

答案 0 :(得分:3)

如果在服务器端设置了适当的HTTP标头,我相信您使用的代码可以正常工作(即LastModifiedETag,{ {1}}等。

无论如何,您使用的代码:

Cache-Control

...是...的简写

InputStream inputStream = new URL(srcURL).openStream();

在调用URLConnection connection = new URL(srcURL).openConnection(); InputStream inputStream = connection.getInputStream(); 之前,可以使用URLConnection实例的setUseCache(boolean)方法来控制缓存,方法是

getInputStream()

对于HTTP / HTTPS,这应该等效于在请求中设置URLConnection connection = new URL(srcURL).openConnection(); connection.setUseCache(false); InputStream inputStream = connection.getInputStream(); 标头值,迫使行为良好的服务器向您发送资源的最新版本。

您也可以使用Cache-Control: no-cache方法执行此操作,这是设置HTTP标头的更通用的方法。当然,您也可以在此处设置其他HTTP标头,例如URConnection.setRequestProperty(key, value)If-None-Match。同样,必须在调用If-Modified-Since之前 设置所有标头。

getInputStream()