我正在制作一个网络应用程序,我想将图像存储在缓存中。下次我不想从网络获取图像。如何使用 java 实现,使用 WeakHashmap
或 Hashmap
。
最佳答案
假设您有一个类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/