【问题标题】:Performance of FileUtils.write from Apache Commons - Java来自 Apache Commons - Java 的 FileUtils.write 的性能
【发布时间】:2013-08-15 18:36:39
【问题描述】:

我已经浏览了 javadoc 但我找不到任何东西。它是否在内部缓冲数据? 如果是,由于没有关闭/刷新操作,它如何确保所有数据都已写入。如果不缓冲,是否每次调用都去磁盘?

http://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/FileUtils.html#write(java.io.File, java.lang.CharSequence, java.nio.charset.Charset, boolean)

我在这里查看了源代码http://grepcode.com/file/repo1.maven.org/maven2/commons-io/commons-io/2.4/org/apache/commons/io/FileUtils.java#FileUtils.openOutputStream%28java.io.File%2Cboolean%29,它似乎没有做任何缓冲。它每次都会打开一个流。

【问题讨论】:

  • 确定有关闭/刷新操作;它只是自己做,而不是让你做。

标签: java apache-commons


【解决方案1】:

从源上看,创建一个新的流,写出数据,然后关闭流。

Here's the link to the source我曾经确定过这一点。当你调用 write 时,最终会调用 writeStringToFile。

这是有道理的,因为它是一个不返回任何内容的静态方法。

因此,它不会在内部缓冲数据。每次调用write,数据都会写入文件。

【讨论】:

  • 没问题!我们都需要有人不时让我们再次朝着正确的方向前进。
  • 我正在使用 FileUtils.write(..) 进行一些特定的文件登录,这是非常多线程的场景。在 Linux 中,一段时间后我遇到了 IOException(打开的文件太多)问题。我增加了 FileDescriptors 限制,现在它似乎运行良好,但我有点好奇它是否没有挂在内存中。
猜你喜欢
  • 2011-11-12
  • 1970-01-01
  • 2011-08-31
  • 2018-10-17
  • 1970-01-01
  • 2010-09-20
  • 2016-05-12
  • 2011-12-11
  • 1970-01-01
相关资源
最近更新 更多