我正在尝试从DB写一个大文件文本,大约2毫米线。 我观察到,当PrintWriter正在打印(println())行时,文件大小总是0字节。流关闭后,该文件具有大小数据。 它导致所有数据首先保存在内存中,并在流关闭时释放它。 在我的情况下,1毫秒的数据+ - 2.5GB的内存消耗。应用程序崩溃。 是否可以实时写入数据并防止内存耗尽?
这是一个例子:
File file = new File("file.txt");
PrintWriter out;
out = new PrintWriter(new OutputStreamWriter(new BufferedOutputStream(new FileOutputStream(file)), "UTF-8"));
for (int i=0; i < 9999999; i++){
out.println("some data here");
}
out.close();
答案 0 :(得分:1)
您已创建PrintWriter而没有自动换行,因此内容将被缓冲,直到您拨打flush()
或close()
。由于您不想刷新每一行(它很慢),您可以使用
N
行的刷新
for (int i=0; i < 9999999; i++){
out.println("some data here");
if(i % N == 0)
out.flush();
}
尝试使用不同的N
值来查看效果如何变化。