JAVA-IO操作,字节-字符转换流
掌握OutputStreamWriter和InputStreamReader类的作用
一般操作输入输出内容的时候,就需要使用字节或字符流,但是,有些时候,需要将字符流变成字节流形式,或者字节流变成字符流形式。
所以,就需要另一种转换流的操作类。
OutputStreamWriter:是Writer的子类。将输出的字符流变成字节流:即将字符流的输入对象变成字节流输入对象。
InputStreamReader:是Reader的子类。将输入的字节流变成字符流,即将一个字节流的输入对象变成字符流输入对象。
OutputStreamWriter类的构造方法
OutputStreamWriter(OutputStream out)
创建使用默认字符编码的 OutputStreamWriter。
从构造方法可以看出,在outputStreamWriter类中需要一个字节流对象。
例如:将字节的文件输出流,以字符的形式输出。
package 类集; import java.io.* ; public class OutputStreamWriterDemo01{ 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 class InputStreamReaderDemo01{ public static void main(String args[]) throws Exception{ 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两个子类的定义,中间使用了转换类。