繁体   English   中英

以正确的方式返回输入流

[英]Returning an input stream the right way

我可能不在这里,但是在执行实现之前,我想确保我正确理解我在这里正在做的场景:

类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对象/流来避免这种情况。

谢谢,

我可能不在基地,但是在这种情况下,最好使用观察者/订阅者模式吗? 如果这样做,则可以将准备就绪的每个文档返回给订户,而不必担心构建任何类型的列表。 如果呼叫者需要列表或存储一些文档,则取决于呼叫者。 否则,您只需要获取下一个文档,并让订户不必担心任何麻烦。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM