[英]Add information to a bufferWriter before flushing it java
我了解BufferedWriter
在將信息寫入文件之前會先存儲信息,然后再執行使用flush()
, Append()
等將信息寫入文件的行為。
我從多個來源收集信息,所以當前我正在做的是在每個來源中循環並每次將其直接附加到文件中,但是我要完成的工作是將所有信息添加到BufferedWriter
並在完成循環之后,將其寫入文件,該怎么辦?
我試圖通過不多次將數據刷新到文件中來提高性能。 性能是有問題的,因為這可能循環一百萬次。
這是我目前正在做的事情:
BufferedWriter
這是我想要做的:
BufferedWriter
這是代碼。
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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.