java bufferedwriter flush 必要性问题
很多帖子说bufferedWriter关闭前必须执行flush才能把进行写操作,但实验的结果并不是如此,个人觉得跟缓冲区尺寸有关,望高人解答,到底什么时候必须使用flus...
很多帖子说bufferedWriter关闭前必须执行flush才能把进行写操作,但实验的结果并不是如此,个人觉得跟缓冲区尺寸有关,望高人解答,到底什么时候必须使用flush什么时候可以不用。具体风险如何?
代码如下:
private boolean writeFileByLine()
{
File file= new File("d:\\123.conf");
if (file.exists())
{
file.delete();
}
BufferedWriter output;
try
{
output = new BufferedWriter(new FileWriter(file));
output.write("restrict adsfasdfignore");
output.newLine();
output.write("restrict " + "asdfasdfasdf");
output.newLine();
output.write("restrict adfdsfasdfas");
output.newLine();
output.write("restrict adsfsdafsadf adfad");
//关闭前必须的操作?
//output.flush();
output.close();
}
catch (IOException e)
{
e.printStackTrace();
}
return true;
}
API我看过的 并且 API也明确说close前要先执行flush 很多有关Writer类使用的帖子也都要求close前flush
现在问题是从我的程序来看似乎并没有这个必要。我尝试修改过缓冲区大小,成倍增加写入字符数量,都对程序没有任何影响。 那么具体那种场景必须要使用flush呢? 如果说Close前会自动执行flush那为什么API还要专门再强调一下? 希望能给出完整一些,深入一些的答复,谢谢大家。 展开
代码如下:
private boolean writeFileByLine()
{
File file= new File("d:\\123.conf");
if (file.exists())
{
file.delete();
}
BufferedWriter output;
try
{
output = new BufferedWriter(new FileWriter(file));
output.write("restrict adsfasdfignore");
output.newLine();
output.write("restrict " + "asdfasdfasdf");
output.newLine();
output.write("restrict adfdsfasdfas");
output.newLine();
output.write("restrict adsfsdafsadf adfad");
//关闭前必须的操作?
//output.flush();
output.close();
}
catch (IOException e)
{
e.printStackTrace();
}
return true;
}
API我看过的 并且 API也明确说close前要先执行flush 很多有关Writer类使用的帖子也都要求close前flush
现在问题是从我的程序来看似乎并没有这个必要。我尝试修改过缓冲区大小,成倍增加写入字符数量,都对程序没有任何影响。 那么具体那种场景必须要使用flush呢? 如果说Close前会自动执行flush那为什么API还要专门再强调一下? 希望能给出完整一些,深入一些的答复,谢谢大家。 展开
2个回答
展开全部
public class BufferedWriterextends Writer将文本写入字符输出流,缓冲各个字符,从而提供单个字符、数组和字符串的高效写入。
可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了。
flush是刷新该流的缓冲,就是将缓冲区里的内容全部刷出去, 这与大缓冲区大小无关。而该类提供的 newLine() 方法,它使用平台自己的行分隔符概念,此概念由系统属性 line.separator 定义。并非所有平台都使用新行符 ('\n') 来终止各行。因此调用此方法来终止每个输出行要优于直接写入新行符。
以上主要来自java api
可以指定缓冲区的大小,或者接受默认的大小。在大多数情况下,默认值就足够大了。
flush是刷新该流的缓冲,就是将缓冲区里的内容全部刷出去, 这与大缓冲区大小无关。而该类提供的 newLine() 方法,它使用平台自己的行分隔符概念,此概念由系统属性 line.separator 定义。并非所有平台都使用新行符 ('\n') 来终止各行。因此调用此方法来终止每个输出行要优于直接写入新行符。
以上主要来自java api
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询