如何用Java编写大型结果到文件中

时间:2014-05-17 20:02:50

标签: java

我想生成一些数据并将它们写入文件。这些数据的大小大于内存容量。我应该用哪种方式来编写这些数据?

现在我正在使用这种方式:

BufferedWriter output = new BufferedWriter(new OutputStreamWriter(
                new FileOutputStream(fileName), "utf-8"
        ));

我不知道数据是否非常大时是否有效,以及是否有其他方式可以提高性能。

此外,编码必须是" utf-8"。

2 个答案:

答案 0 :(得分:1)

您可以使用此方法处理非常大的文件

Open input stream
Open output stream
create byte buffer
while (read stuff into byte buffer) {
    write byte buffer to output stream
}

你是怎么做到的。 你使用缓冲区(比如8k)

 byte[] b = new byte[8192];

读入,写出来。 重复,直到你没有东西要读。

答案 1 :(得分:0)

启动JVM时,您可以通过-Xmx和-Xms标志指定堆(RAM)大小,或者只使用java -jar * .jar运行它并让它使用默认堆大小,请参阅How is the default java heap size determined? 您可以使用launch4j为大多数操作系统创建一个原生的可执行文件。或者你可以使用更多的RAM自动重启jar(所有这些都需要谨慎操作,以避免愚蠢地使用不存在的RAM)。

如果您有常量值,请在以编程方式(database / files / blah)创建文件之前将它们存储在某处。

我相信大多数人会这样做

  

打开输入流   打开输出流   创建字节缓冲区   while(将内容读入字节缓冲区){       将字节缓冲区写入输出流   }

首选FILECHANNELS,他们更好,更快。自己进行一些谷歌搜索,我相信你会解决你的问题。在使用它们之前一定要刷新任何缓冲区并关闭流等等......最后!

P.S。字符串不需要写入文件太多。 IDK,如果一秒钟那么重要!