我想生成一些数据并将它们写入文件。这些数据的大小大于内存容量。我应该用哪种方式来编写这些数据?
现在我正在使用这种方式:
BufferedWriter output = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(fileName), "utf-8"
));
我不知道数据是否非常大时是否有效,以及是否有其他方式可以提高性能。
此外,编码必须是" utf-8"。
答案 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,如果一秒钟那么重要!