你如何控制Java中的资源缓存?

时间:2011-03-17 07:37:32

标签: java image caching resources applet

我正在构建一个Java applet,它涉及从URL中的其他资源中下载图像。我发现图像正在缓存,可以在Temporary Internet Files / View ... / Resources下的Java控制面板中查看它们。不幸的是,我需要能够更新图像并在applet的执行之间出现这些更新,但缓存会导致问题。

我找不到任何有关控制这些资源缓存的信息。什么过程缓存资源以及如何控制它?特别是如何设置图像的到期时间,甚至可能设置特定的图像?

如果相关,我使用以下代码下载图像:( mt是MediaTracker对象)。

public BufferedImage getImageFromUrl(String url)
{
    Image img = null;
    try {
        URL u = new URL(url);
        img = java.awt.Toolkit.getDefaultToolkit().createImage(u);
        mt.addImage(img, numImages++);
        mt.waitForAll();
        ...

感谢您的帮助。

2 个答案:

答案 0 :(得分:2)

使用它来避免来自服务器的缓存图像:

URL u = new URL(url);
URLConnection con = u.openConnection();
con.setUseCaches(false);
img = Toolkit.getDefaultToolkit().createImage(new URLImageSource(u, con));

如果您想要控制到期时间,可以通过添加以下行来专门设置Cache-ControlExpires标题:

con.addRequestProperty("Cache-Control", "no-cache, max-age=3600");
con.addRequestProperty("Expires", "Thu, 17 Mar 2011 01:34:00 GMT");

答案 1 :(得分:1)

使用URLConnection将图像下载到byte数组中。将此byte数组传递给createImage()。您可能还想通过调用setUseCaches(false)对象上的URLConnection来关闭缓存。