【问题标题】:How do you control the caching of resources in Java?在 Java 中如何控制资源的缓存?
【发布时间】:2011-07-17 05:01:51
【问题描述】:

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

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

如果相关,我将使用如下代码下载图像:(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();
        ...

感谢您的帮助。

【问题讨论】:

    标签: java image caching resources applet


    【解决方案1】:

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

    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");
    

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-25
        • 2016-01-17
        • 1970-01-01
        • 1970-01-01
        • 2022-11-10
        • 1970-01-01
        • 2021-12-19
        • 1970-01-01
        相关资源
        最近更新 更多