我有一个可视化数据集的程序。可以一次加载多个数据集(但一次只能显示一个数据集),并且数据集可能足够大以至于存储器成为问题。我想要做的是实现一个缓存机制,以便将数据集缓存在它们自己的临时文件中,并且GUI保存对每个数据集的软引用,以便更有效地使用内存。这就是我的想法:
class DataSetReference extends SoftReference<DataSet> {
private File cache;
public DataSetReference(DataSet referent, byte[] rawData) {
super(referent);
// Skip error checking, etc.
cache = File.createTempFile("abc", null);
writeDataToCache(cache, rawData);
}
@Override
public DataSet get() {
if (super.get() == null) {
refreshReferenceFromCache();
}
return super.get();
}
private refreshReferenceFromCache() {
DataSet ds = parseDataSetFromFile(cache);
// profit???
}
}
然后我意识到SoftReference
是不可变的,这会杀死这个想法。我似乎要做的就是在软引用之外重新创建DataSet
实例,然后创建一个新的软引用,并将旧引用替换为可视化数据集的GUI组件中的new。
我的问题是:是否有一些模式或示例用于实现SoftReference
的缓存?这是我第一次尝试使用软引用,在查看其他一些实现后,我会觉得更舒服。感谢。