java - 在刷新之前向 bufferWriter 添加信息 java

标签 java performance

据我了解,BufferedWriter 在我写入文件之前存储信息,然后再使用 flush()Append() 等执行将信息写入文件的操作。

我从多个来源收集信息,所以目前我正在做的是循环每个来源并将其每次直接附加到文件中,但我想要完成的是添加 BufferedWriter 中的所有信息,并在完成循环后将其写入文件,这是怎么做到的?

我试图通过不多次将数据刷新到文件中来提高性能。性能是个问题,因为这可能会循环 100 万次。

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

  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;
    }

最佳答案

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/

相关文章:

java - 使用 fragment 中的自定义适配器和自定义行过滤 ListView

java - javax.servlet.ServletException 的 JCo 问题

windows - 我如何确定我的进程是 CPU 绑定(bind)、I/O 绑定(bind)、内存绑定(bind)还是

python - 重新排列优先级队列的优先级(有效方式)

android - Play 控制台报告开发期间发生的崩溃

mysql - 查找表的高效索引

java - 如何在 spring mvc 中使用 ehcache 进行永久缓存

Java - 如何检测智能卡热插拔

java - 如何处理多个 Route 的异常

python - `scipy.optimize.root` 更快的根查找