我可能不在这里,但在我实施之前,我想确保我正确理解我在这里做的是场景:
A类负责收集文档信息(ID,内容等...)我循环收集文档块(可配置)但是例如,我们一次说10000个文档。
public class A{
private List<Documents> docs = new ArrayList<Documents>
public InputStream retrieveAllDocuments(){
// Loop here to retrive the 10000 document chunk.
while(docs.size() < 10000000){
List<TrimmedDownDoc> tempList = callSlowApiToRetrieveDoc();
ExecutorService.call(InnerA);
}
return an InputStream;
}
private class InnerA implements Callable<Boolean> {
private List<TrimmedDownDoc> tempList
public InnerA(List<...> tempList){
this.tempList = tempList;
}
public Boolean call() {
// extract temp list and populate docs list in a threadsafe manner.
// Once this is done I would like to push them to the stream
}
}
}
我正在研究最佳方法,因此A类消费者可以在流文档可用时读取。这将阻止A类构建一个文档列表,这些文档将是数百万个长期影响内存使用的文档。目前我并没有真正看到除了保存到临时文件之外的其他选择,但我想通过使用正确的Java对象/流来避免这种情况。
谢谢,
答案 0 :(得分:0)
我可能偏离基础,但在这种情况下最好使用Observer / Subscriber模式吗?如果您这样做,您可以在准备好时返回准备好的每个文档,而不必担心构建任何类型的List。如果调用者想要一个List或存储一些文档,则由调用者决定。否则,您只需获取下一个文档,让用户担心无论如何担心。