簡體   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