java - 一旦图像进入内存,我们如何通过缓存获取图像以及如何制定这样的逻辑

标签 java

我正在制作一个网络应用程序,我想将图像存储在缓存中。下次我不想从网络获取图像。如何使用 java 实现,使用 WeakHashmapHashmap

最佳答案

假设您有一个类NetworkImageService,它可以远程获取图像:

class NetworkImageService {

    public Image getImage(name) { ... }

}

然后您可以将其子类化为具有CachedNetworkImageService,如下所示:

 class CachedNetworkImageService extends NetworkImageService {

    Cache cache = new Cache();

    public Image getImage(name) { ... 
          Image img = cache.get(name);
          if( img == null ) {
                 img = super.getImage(name);
                 cache.put( name, img );
          }
          return img.
    }
}

这是我通常做法的基本思想(但它是伪代码)。您当然可以改进它并使用例如 cache.contains() 来检查 null

在最基本的情况下,您可以用 Hashmap 替换 Cache。否则,您可以改进这一点并在缓存中实现各种策略。您可以制定驱逐策略,在一段时间后删除图像,或者遵循 LIFO 方案。

上面的代码不支持并发访问,所以你也需要考虑这一点。使其线程安全的最基本方法是同步方法getImage()

关于java - 一旦图像进入内存,我们如何通过缓存获取图像以及如何制定这样的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2688834/

相关文章:

java - 在 Eclipse 中,什么插件/类提供 Java 代码的样式格式化?

java - 如何使用 selenium.creatCookie 添加特定域的 cookie

java - 继承:有没有办法发现调用方法的类?

java - Gson 在反序列化期间检查枚举值

java - 手机上的注册 Activity 卡住

java - 如何在 xpath 变量旁边附加 "descendant"子句?

java - 在 Java 中将十六进制字符串转换为无符号字节数组

java - JavaFx 中介者

java - 在文档上下文中添加 arrayJson 时,数组带有空 json

java - 我可以本地化 JOptionPane 是/否/取消选项吗?