如何在不等待文件关闭的情况下将文本写入文件
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 的缓存这也是)。
我认为您过早地优化了您的解决方案,应该测试一下它是否真的会成为一个问题。您甚至可能会发现您想要增加缓冲区大小
我正在尝试将文本写入文件,但我注意到只有在使用 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 的缓存这也是)。
我认为您过早地优化了您的解决方案,应该测试一下它是否真的会成为一个问题。您甚至可能会发现您想要增加缓冲区大小