为什么建议将BufferedWriter包装在任何write()操作可能代价高昂的Writer周围,例如FileWriters和OutputStreamWriters?

时间:2015-06-03 15:28:29

标签: java file filewriter bufferedwriter

我的问题是,是否直接使用,如下所示;

class Test{    
public static void main(String args[]){       
  try{ 
    FileWriter fo =new FileWriter("somex.txt"); 
    int arr[] = {9}; 
    for(int i =0; i <arr.length; i++){
      fo .write(arr[i]); // this is very costly.
    }
    fo.write(b); 
    fo.close(); 
    System.out.println("....");
 }catch(Exception e){system.out.println(e);}     
 } 
}    

OR

编码效率更高,如下所示;

class Test{     
 public static void main(String args[])throws Exception{  
   BufferedWriter bfw= new BufferedWriter(new FileWriter("foo.out")));  

   int arr[] = {9};
   for(int i =0; i <arr.length; i++){
      bfw .write(arr[i]); 
    }

   bfw.flush();  
   bfw.close();  

   System.out.println(".......");  
 }  
}   

没有区别,因为两者都会进行相同的写操作。有人能帮助我理解这些微妙之处吗?

1 个答案:

答案 0 :(得分:1)

BufferedWriter将内容存储在内存中,直到达到缓冲区大小为止,然后每次FileWriter都会直接写入一次大写。因此,对于循环的每次迭代FileWriter,都会有写入。 BufferedWriter只能在循环结束时写一次,具体取决于缓冲区大小。