为了账号安全,请及时绑定邮箱和手机立即绑定

在刷新之前将信息添加到 bufferWriter java

在刷新之前将信息添加到 bufferWriter java

慕村225694 2021-10-17 10:36:09
据我所知,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。


查看完整回答
反对 回复 2021-10-17
?
慕村9548890

TA贡献1884条经验 获得超4个赞

缓冲写入器将在您指示时刷新。并且任何时候缓冲区变满。确定缓冲区何时变满可能很棘手。真的,你不应该关心。无论何时刷新,缓冲写入器都将提高性能。相反,您的输出代码应该BufferedWriter 任何其他Writer.

我还在您的代码中看到您反复打开和关闭输出文件。你几乎肯定不需要这样做。而是在程序的更高级别打开和关闭文件,因此它在每次迭代时都保持打开状态。


查看完整回答
反对 回复 2021-10-17
  • 2 回答
  • 0 关注
  • 122 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信