如何在不等待文件关闭的情况下将文本写入文件

How to write text into file without waiting for file closure

我正在尝试将文本写入文件,但我注意到只有在使用 close() 关闭文件时才会写入文件。当文本非常小时,这不是问题。但是因为我确定我要写大量的文本,所以我不希望文本溢出我的主内存。有没有更好的方法做到这一点而不会溢出内存?​​

BufferedWriter outputHandle = new BufferedWriter(new FileWriter(file));

while(true)
{
    try {
        <DO SOME PROCESSING >
                outputHandle.write(text);
    } catch (Exception e) {
        break;
    }
}

如@MadProgrammer 所述,flush 有效。

outHandle.flush()

缓冲区没有增长;它的目的是降低写入文件的成本:写入一个字符与写入几千字节一样昂贵(至少在某些情况下),因此将数据保留在缓冲区中并且仅在其已满时才写入可以优化性能。

BufferedWriter 的默认缓冲区大小为 8kb (private static int defaultCharBufferSize = 8192),但您可以使用 public BufferedWriter(Writer out, int sz) 构造函数

更改缓冲区大小

虽然您可以使用 BufferedWriter#flush,但它的使用可能会影响您的应用程序的性能(因为它可能会增加磁盘 I/O ...虽然,大多数 OS 的缓存这也是)。

我认为您过早地优化了您的解决方案,应该测试一下它是否真的会成为一个问题。您甚至可能会发现您想要增加缓冲区大小