Java PrintWriter大内存消耗

时间:2017-11-14 18:06:41

标签: java printwriter

我正在尝试从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();

1 个答案:

答案 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值来查看效果如何变化。