gpt4 book ai didi

java - 缓存文件输入流

转载 作者:行者123 更新时间:2023-11-30 03:10:20 24 4
gpt4 key购买 nike

在我的程序中,我反复读取许多这样的文件:

String myLetter = "CoverSheet.rtf"; // actually has a full path
FileInputStream in = new FileInputStream(myLetter);
letterSection.importRtfDocument(in);
in.close();

因为有许多小文件是要使用 importRtfDocument 添加到文档中的组件,并且一次运行要生成数千个字母,所以处理速度相当慢。

importRtfDocument 方法来 self 正在使用的库,需要提供一个 FileInputStream。这就是我被难住的地方。我尝试了一些方法,例如为类中的每个文件声明一个 FileInputStream 并保持它们打开 - 但不支持 reset()

我看过其他类似的问题,比如这个:

How to Cache InputStream for Multiple Use

但是,似乎没有一个可以解决我的问题,也就是说,我如何缓存 FileInputStream

最佳答案

我通常创建自己的池来缓存文件。只需考虑以下简单代码:

class CachedPool {
private Map<URI, CachedFile> pool = new HashMap<>();

public CachedPool(){
}

public <T> T getResource(URI uri) {
CachedFile file;
if(pool.containsKey(uri)){
file = pool.get(uri);
} else {
file = new CachedFile(uri); // Injecting point to add resources
pool.put(uri, file);
}
return file.getContent();
}
}

class CachedFile {
private URI uri;
private int counter;
private Date cachedTime;
private Object content;

public CachedFile(URL uri){
this.url = uri;
this.content = uri.toURL().getContent();
this.cachedTime = new Date();
this.counter = 0;
}

public <T> T getContent(){
counter++;
return (T) content;
}

/** Override equals() and hashCode() **/
/** Write getters for all instance variables **/
}

您可以使用CachedFilecounter来删除在一段时间后或堆内存非常低时很少使用的文件。

关于java - 缓存文件输入流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33750987/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com