1. OutputStreamWriter (转换流)
OutputStreamWriter 是字符流通向字节流的桥梁:可使用指定的 charset
将要写入流中的字符编码成字节。
同时OutputStreamWriter 也是 字符流Writer(抽象类)一个具体实现子类。
所以我们这个OutputStreamWriter (转换流)也是字符流。
2. OutputStreamWriter(Writer字符流的子类)5种write数据方式:
1 public void write(int c):写一个字符 2 public void write(char[] cbuf):写一个字符数组 3 public void write(char[] cbuf,int off,int len):写一个字符数组的一部分 4 public void write(String str):写一个字符串 5 public void write(String str,int off,int len):写一个字符串的一部分
(1)代码示例:
1 package cn.itcast_03; 2 3 import java.io.FileOutputStream; 4 import java.io.IOException; 5 import java.io.OutputStreamWriter; 6 7 /* 8 * OutputStreamWriter的方法: 9 * public void write(int c):写一个字符 10 * public void write(char[] cbuf):写一个字符数组 11 * public void write(char[] cbuf,int off,int len):写一个字符数组的一部分 12 * public void write(String str):写一个字符串 13 * public void write(String str,int off,int len):写一个字符串的一部分 14 * 15 */ 16 public class OutputStreamWriterDemo { 17 public static void main(String[] args) throws IOException { 18 // 创建对象 19 OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream( 20 "osw2.txt")); 21 22 // 写数据 23 // public void write(int c):写一个字符 24 // osw.write('a'); 25 // osw.write(97); 26 // 为什么数据没有进去呢? 27 // 原因是:字符 = 2字节 28 // 文件中数据存储的基本单位是字节。 29 // void flush() 30 31 // public void write(char[] cbuf):写一个字符数组 32 // char[] chs = {'a','b','c','d','e'}; 33 // osw.write(chs); 34 35 // public void write(char[] cbuf,int off,int len):写一个字符数组的一部分 36 // osw.write(chs,1,3); 37 38 // public void write(String str):写一个字符串 39 // osw.write("我爱林青霞"); 40 41 // public void write(String str,int off,int len):写一个字符串的一部分 42 osw.write("我爱林青霞", 2, 3); 43 44 // 刷新缓冲区 45 osw.flush(); 46 47 // 释放资源 48 osw.close(); 49 50 } 51 }
(2)相信大家会开始疑惑,之前我们代码中没有使用过flush()方法也是可以将数据写入成功的,其实只要看看API就行了,如下:
void |
close() 关闭此流,但要先刷新它。 |
void |
flush()
刷新该流的缓冲。 |
面试题:close()和 flush()的区别 ?
• close()关闭流对象,但是先刷新一次缓冲区。关闭之后,流对象不可以继续再使用了。
• flush()仅仅刷新缓冲区,刷新之后,流对象还可以继续使用。