Java 有没有办法清除InputStream缓存

Java 有没有办法清除InputStream缓存,java,inputstream,bufferedimage,Java,Inputstream,Bufferedimage,我们使用InputStreams从外部URL读取图像,问题是图像在外部服务器中不断变化,但保持相同的URL。 有时,即使在外部服务器中对映像进行版本化之后,更改也不会出现在我们这边 调试此简单代码行时: InputStream inputStream = new URL(srcURL).openStream(); 我发现输入流仍然返回旧版本的媒体。即使通过浏览器访问相同的srcURL,也会生成新版本的图像 我想这是因为我们以前没有关闭inputStream。 但现在,即使更正了这个问题/重新启

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

调试此简单代码行时:

InputStream inputStream = new URL(srcURL).openStream();
我发现输入流仍然返回旧版本的媒体。即使通过浏览器访问相同的srcURL,也会生成新版本的图像

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

inputStream是否使用某种memorycache? 你能告诉我我们做错了什么吗


提前谢谢。

如果在服务器端设置了适当的HTTP头(即
LastModified
ETag
缓存控制
等),我相信您使用的代码会正常工作

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

InputStream inputStream = new URL(srcURL).openStream();
…是以下内容的简写:

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

对于HTTP/HTTPS,这相当于在请求中设置
缓存控制:no Cache
头值,强制行为良好的服务器向您发送资源的最新版本

您还可以使用
URConnection.setRequestProperty(key,value)
方法来实现这一点,这是设置HTTP头的一种更通用的方法。当然,您也可以在此处设置其他HTTP头,例如,如果没有匹配的HTTP头,则设置为
;如果自
以来进行了修改,则设置为
。同样,在调用
getInputStream()
之前,必须设置所有头


如果在服务器端设置了适当的HTTP头(例如,
LastModified
ETag
缓存控制
等),我相信您使用的代码将正常工作

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

InputStream inputStream = new URL(srcURL).openStream();
…是以下内容的简写:

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

对于HTTP/HTTPS,这相当于在请求中设置
缓存控制:no Cache
头值,强制行为良好的服务器向您发送资源的最新版本

您还可以使用
URConnection.setRequestProperty(key,value)
方法来实现这一点,这是设置HTTP头的一种更通用的方法。当然,您也可以在此处设置其他HTTP头,例如,如果没有匹配的HTTP头,则设置为
;如果自
以来进行了修改,则设置为
。同样,在调用
getInputStream()
之前,必须设置所有头