掌握OutputStreamWriter和InputStreamReader类的作用
一般操作输入输出内容的时候,就需要使用字节或字符流,但是,有些时候,需要将字符流变成字节流形式,或者字节流变成字符流形式。
所以,就需要另一种转换流的操作类。
OutputStreamWriter:是Writer的子类。将输出的字符流变成字节流:即将字符流的输入对象变成字节流输入对象。
InputStreamReader:是Reader的子类。将输入的字节流变成字符流,即将一个字节流的输入对象变成字符流输入对象。
OutputStreamWriter类的构造方法
OutputStreamWriter(OutputStreamout)
创建使用默认字符编码的 OutputStreamWriter。
从构造方法可以看出,在outputStreamWriter类中需要一个字节流对象。
例如:将字节的文件输出流,以字符的形式输出。
package类集;import java.io.*;public classOutputStreamWriterDemo01{public static void main(String args[]) throws Exception { //所有异常抛出
File f = new File("d:" + File.separator + "test.txt") ;
Writer out= null ; //字符输出流
out = new OutputStreamWriter(new FileOutputStream(f)) ; // 字节流变为字符流,同时向上转型。
out.write("hello world!!") ; //使用字符流输出
out.close() ;
}
};
读的时候,也可以使用字符流的形式读取字节流文件。
package类集;import java.io.*;public classInputStreamReaderDemo01{public static void main(String args[]) throwsException{
File f= new File("d:" + File.separator + "test.txt") ;
Reader reader= null;
reader=new InputStreamReader(new FileInputStream(f)) ; //将字节流变为字符流
char c[] = new char[1024] ;int len = reader.read(c) ; // 读取
reader.close() ; //关闭
System.out.println(new String(c,0,len)) ;
}
};
输出结果:
hello world!!
但是,以上只是文件操作为例,因为outputStreamWriter中接收的类型是OutputStream,只要是字节输出流都可以使用字符的形式操作。
而InputStreamReader中接收的类型是InputStream。只要是字节输入流,都可以使用字符的输入流操作。
FileWriter和FileReader类的说明
java.io
类 FileWriter
java.lang.Object
继承者 java.io.Writer
继承者 java.io.OutputStreamWriter
继承者 java.io.FileWriter
FilWriter不是Writer的子类,而是转换流的子类。
java.io
类 FileReader
java.lang.Object
继承者 java.io.Reader
继承者 java.io.InputStreamReader
继承者 java.io.FileReader
FileReader也不是Reader的子类,而是转换流的子类。
也就是说,不管如何,虽然是以字符的输出流形式,操作字节流输出流,但是实际上还是以字节的形式输出。
而字符的输入流虽然是以字符的形式操作,但是还是使用了字节流,也就是说,在传输或者从文件读取数据的时候,文件里真正保存的数据永远是字节。
总结
1,一定要掌握两个转换类的作用
2,一定要明白的终端点实际上是以字节的形式进行的。
3,FileWriter和FileReader两个子类的定义,中间使用了转换类。