据我所知,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; }
2 回答
HUH函数
TA贡献1836条经验 获得超4个赞
我试图通过不多次将数据刷新到 de 文件来提高性能
每次写入后是否手动刷新数据?不要那样做。
否则,在实例化 BufferedWriter 时指定更大的大小。
您可以选择使用 StringBuilder 首先聚合输出。但是,我假设您的输出比您想存储在内存中的要多。
最后,真的有性能成本吗?
===
BufferedWriter 将优化它执行的实际写入。只要您指定一个大的缓冲区大小,例如 10,000,在缓冲区满之前,对缓冲区的多次小写入将不会导致写入。我看到一条评论说您正在“清除”缓冲区。不要那样做。把 BufferedWriter 放在一边,让它做它自己的事。
如果您正在积累信息,然后由于某种原因将其丢弃,请使用 StringBuilder 积累,然后将 StringBuild 内容写入 Writer。
添加回答
举报
0/150
提交
取消