目录
2.1. StringReader/StringWriter
2.2. InputStreamReader/OutputStreamWriter
2.4. BufferedReader/BufferedWriter
2.6. CharArrayReader/CharArrayWriter
2.7. FilterReader/FilterWriter/PushBackReader
一. 前言
在字节流的基础上,加上编码,因为字节流在操作字符时,有可能会有中文导致的乱码。
1. 以 Reader 和 Writer 结尾;
2. Reader 是字符输入流的父类,Writer 是字符输出流的父类;
3. 读写的时候按字符读写,主要用来处理字符或字符串;
4. 字符流在操作时需要用到缓冲区


二. 实现类
2.1. StringReader/StringWriter
StringReader类是一个以字符串为源的字符流。它接受输入字符串并将其更改为字符流。它继承了Reader类。在StringReader类中,未使用系统资源(如网络套接字和文件),因此不需要关闭StringReader。
StringWriter是将一个StringBuffer对象作为输出目的地,并且可以在构造函数指定 buffer 的大小。StringWriter只是将数据写入到一个buffer对象中,而不是实质的物理介质,这个对象最后又可以转换成字符串(toString)。
2.2. InputStreamReader/OutputStreamWriter
InputStreamReader 是字节流通向字符流的桥梁,它将字节流转换为字符流。可以指定字符编码格式,入参传递InputStream对象。InputStream对象定义方法有两种,System.in或FileInputStream对象。
InputStreamReader isr1 = new InputStreamReader(System.in);
InputStreamReader isr2 = new InputStreamReader(new FileInputStream("/opt/xxx"));
InputStreamReader isr3 = new InputStreamReader(new FileInputStream(new File("/opt/xxx")));
OutputStreamWriter 是Writer的子类,将输出的字符流变为字节流,即将一个字符流的输出对象变为字节流的输出对象。
OutputStreamWriter out1 = new OutputStreamWriter(new FileOutputStream(file), CharsetName);
2.3. FileReader/FileWriter
FileReader是InputStreamReader的子类,不能指定字符编码,其他与InputStreamReader基本类似。
FileReader fr1 = new FileReader("/opt/xxx.txt");
FileReader fr2 = new FileReader(new File("/opt/xxx.txt"));
FileWriter 类从 OutputStreamWriter 类继承而来。该类按字符向流中写入数据。可以通过以下几种构造方法创建需要的对象。
FileWriter fw = FileWriter(FileDescriptor fd);
FileWriter fw2 = FileWriter(String fileName, boolean append);
FileWriter fw3 = FileWriter(File file, boolean append);
2.4. BufferedReader/BufferedWriter
BufferedReader 和 BufferedWriter 类各拥有 8192 个字符的缓冲区。属于字符流,按照字符读取数据的。
BufferedReader 从字符输入流中读取文本,内部缓冲各个字符,从而实现字符、数组和行的高效读取
BufferedReader bufferFr = new BufferedReader(new FileReader(filename));
BufferedReader bufferIsr = new BufferedReader(new InputStreamReader(fileinputstream));
BufferedWriter 将文本写入字符输出流,内部缓冲各个字符,从而提供单个字符、数组和字符串的高效写入
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(filename));
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(fileoutputstream));
2.5. PipedReader/PipedWriter
PipedReader 和 PipedWriter,意为管道读写流。所谓管道,那就是有进有出,所以这也是它们跟其它流对象最显著的区别:PipedReader和PipedWriter必须成对使用才有意义。
PipedWriter 扮演生产者的角色,将字符数据写入到管道;PipedReader扮演消费者的角色,负责将数据从管道取出消费掉。
2.6. CharArrayReader/CharArrayWriter
读 CharArrayReader 需要接受一个字符数组作为参数,就是从CharArray 中读,所以需要一个字符数组。
写 CharArrayWriter 就是写入到一个CharArray 中去,所以,它内部维护了一个字符数组。显然,字符数组都是内存中的数据。
2.7. FilterReader/FilterWriter/PushBackReader
FilterReader 和 FilterWriter 用于读写过滤后的字符流的抽象类。除了简单覆盖父类方法,没有添加额外的方法。
FilterReader:过滤器字符输入流,用于读取过滤后的字符流的抽象类。
FilterWriter:过滤器字符输出流,用于写入过滤后的字符流的抽象类。
PushBackReader 是 FilterReader 的子类,一个字符流读取器,允许将字符推回到流中。拥有一个PushBack缓冲区,只要PushBack缓冲区没有满,就可以使用unread()将数据推回流的前端。除了简单覆盖父类方法,没有添加额外的方法。
1068





