我们如何在内存中通过缓存获取图像以及如何制作这样的逻辑

时间:2010-04-22 07:07:25

标签: java

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

1 个答案:

答案 0 :(得分:1)

假设你有一个类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进行检查。

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

上面的代码不支持并发访问,因此您还需要考虑这一点。使其成为线程安全的最基本方法是同步方法getImage()