据我了解,BufferedWriter
在我写入文件之前存储信息,然后再使用 flush()
、Append()
等执行将信息写入文件的操作。
我从多个来源收集信息,所以目前我正在做的是循环每个来源并将其每次直接附加到文件中,但我想要完成的是添加 BufferedWriter
中的所有信息,并在完成循环后将其写入文件,这是怎么做到的?
我试图通过不多次将数据刷新到文件中来提高性能。性能是个问题,因为这可能会循环 100 万次。
这是我目前正在做的事情:
- 打开
BufferedWriter
- 从不同来源读取数据并存储在缓冲区中
- 将存储的数据追加到文本文件中(此处缓冲区已清空)
- 重复步骤 2.- 和 3.- 50 次
- 关闭文本文件
这是我正在尝试做的事情:
- 打开
BufferedWriter
- 从不同来源读取数据并存储在缓冲区中
- 重复步骤 2.- 50 次
- 附加收集的所有数据(50 个循环收集的数据)
- 关闭文件
这是代码。
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;
}
最佳答案
i am trying to improve performance by not flushing the data into de file so many times
您是否在每次写入后手动刷新数据?不要那样做。
否则,请在实例化 BufferedWriter 时指定更大的大小。
您可以选择首先使用 StringBuilder 聚合输出。但是,我假设您的输出多于您想要存储在内存中的输出。
最后,真的有性能成本吗?
===
BufferedWriter 将优化其执行的实际写入。只要指定较大的缓冲区大小(例如 10,000),对缓冲区的多次小写入就不会导致写入,直到缓冲区已满。我看到一条评论说您正在“清除”缓冲区。不要那样做。不要管 BufferedWriter,让它做它自己的事情。
如果您正在积累信息,然后由于某种原因丢弃它,请使用 StringBuilder 进行积累,然后将 StringBuild 内容写入 Writer。
关于java - 在刷新之前向 bufferWriter 添加信息 java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52538003/