下面两端程序有何差别?
FileOutputStream fos = new FileOutputStream("o.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos);
BufferedWriter bw = new BufferedWriter(osw);

bw.write("You are welcome!");
bw.close();
     FileWriter fw = new FileWriter("w.txt");
BufferedWriter bw1 = new BufferedWriter(fw);
bw1.write("Thank you all the same!:)");
bw1.close();个人理解:第一段是向文件中写入字节,第二段是写入字符。一个字节只能对Asc码中的有效,对汉字等就无效了,但写入字符的依然可以写入汉字。是这样吗

解决方案 »

  1.   

     OutputStreamWriter 更完善,常用第一种
      

  2.   

    OutputStreamWriter 是字符流通向字节流的桥梁:
           使用指定的 charset 将要向其写入的字符编码为字节。它使用的字符集可以由名称指定或显式给定,否则可能接受平台默认的字符集。每次调用 write() 方法都会针对给定的字符(或字符集)调用编码转换器。在写入基础输出流之前,得到的这些字节会在缓冲区累积。可以指定此缓冲区的大小,不过,默认的缓冲区对多数用途来说已足够大。注意,传递到此 write() 方法的字符是未缓冲的。 为了达到最高效率,可考虑将 OutputStreamWriter 包装到 BufferedWriter 中以避免频繁调用转换器。例如:  Writer out
       = new BufferedWriter(new OutputStreamWriter(System.out));