我正在制作一个Web应用程序,我想将图像存储在缓存中。下次我不想从网络上获取图像。如何使用WeakHashmap
或Hashmap
来实现java。
答案 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()
。