簡體   English   中英

在刷新Java之前將信息添加到bufferWriter

[英]Add information to a bufferWriter before flushing it java

我了解BufferedWriter在將信息寫入文件之前會先存儲信息,然后再執行使用flush()Append()等將信息寫入文件的行為。

我從多個來源收集信息,所以當前我正在做的是在每個來源中循環並每次將其直接附加到文件中,但是我要完成的工作是將所有信息添加到BufferedWriter並在完成循環之后,將其寫入文件,該怎么辦?

我試圖通過不多次將數據刷新到文件中來提高性能。 性能是有問題的,因為這可能循環一百萬次。

這是我目前正在做的事情:

  1. 打開BufferedWriter
  2. 從其他來源讀取數據並存儲在緩沖區中
  3. 將存儲的數據追加到文本文件中(此處清空緩沖區)
  4. 重復步驟2.-和3.- 50次
  5. 關閉文本文件

這是我想要做的:

  1. 打開BufferedWriter
  2. 從其他來源讀取數據並存儲在緩沖區中
  3. 重復步驟2-50次
  4. 附加所有收集的數據(通過50個循環收集的數據)
  5. 關閉檔案

這是代碼。

 for (int mainLoop = 0; mainLoop < 50; mainLoop++){

        try {
            BufferedWriter writer = writer = new BufferedWriter(new 
FileWriter
                    ("path to file in computer" + mainLoop + ".txt", true));


        for(int forloop = 0; forloop < 50; forloop++) {
            final Document pageHtml= 
Jsoup.connect("link to a page").get();


            Elements body = pageHtml.select("p");

            writer.append(System.getProperty("line.separator"));
            writer.append(System.getProperty("line.separator"));
            writer.append(body.text());

            System.out.println(forloop);
        }
        writer.close();
        } catch (IOException e) {
            e.printStackTrace();
        }continue;
    }

我試圖通過不多次將數據刷新到文件中來提高性能

您是否在每次寫入后手動刷新數據? 不要那樣做

否則,在實例化BufferedWriter時指定較大的大小。

您可以選擇使用StringBuilder首先聚合輸出。 但是,我假設您的輸出要比要存儲在內存中的更多。

最后,真的有性能成本嗎?

===

BufferedWriter將優化它執行的實際寫入。 只要您指定較大的緩沖區大小(例如10,000),對緩沖區的多次小寫操作就不會引起寫操作,直到緩沖區已滿。 我看到您正在“清除”緩沖區的評論。 不要那樣做 不用理會BufferedWriter,讓它做它的事。

如果要累積信息,然后由於某種原因而丟棄它,請使用StringBuilder進行累積,然后將StringBuild內容寫入Writer。

當您指示緩沖寫入器時,它將刷新。 並且在任何時候緩沖區變滿。 確定緩沖區何時變滿可能很棘手。 確實,您無需關心。 緩沖寫入器將提高性能,無論何時刷新。 相反,您的輸出代碼應該其他Writer 一樣使用BufferedWriter

我還在您的代碼中看到您反復打開和關閉輸出文件。 您幾乎肯定不需要這樣做。 而是在程序的更高級別打開和關閉文件,因此它在每次迭代時都保持打開狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM