Java中字符是采用Unicode标准,一个字符是16位,即一个字符使用两个字节来表示。
因为数据编码的不同,JAVA中引入了处理字符的流,对字符进行高效操作的流对象。
本质其实就是基于字节流读取时,去查了指定的码表。
字符流:数据流中最小的数据单元是字符, Java中的字符是Unicode编码,一个字符占用两个字节。
一、字符输入流Reader
父类 | 子类 | 孙类 |
---|---|---|
Reader java.lang.Readable java.io.Closeable | ||
StringReader | ||
CharArrayReader | ||
BufferedReader | LineNumberReader | |
FilterReader | PushbackReader | |
PipedReader | ||
InputStreamReader | FileReader |
-
Reader是所有的输入字符流的父类,它是一个抽象类。
-
CharReader、StringReader是两种基本的介质流,它们分别将Char数组、String中读取数据。PipedReader是从与其它线程共用的管道中读取数据。
-
BufferedReader很明显就是一个装饰器,它和其子类负责装饰其它Reader对象。
-
FilterReader是所有自定义具体装饰流的父类,其子类PushbackReader对Reader对象进行装饰,会增加一个行号。
-
InputStreamReader是一个连接字节流和字符流的桥梁,它将字节流转变为字符流。FileReader可以说是一个达到此功能、常用的工具类,在其源代码中明显使用了将FileInputStream转变为Reader的方法。我们可以从这个类中得到一定的技巧。Reader中各个类的用途和使用方法基本和InputStream中的类使用一致。后面会有Reader与InputStream的对应关系。
主要方法:
//读取一个字符,返回值为读取的字符
(1) public int read() throws IOException;
//读取一系列字符到数组cbuf[]中,返回值为实际读取的字符的数量*/
(2) public int read(char cbuf[]) throws IOException;
//读取len个字符,从数组cbuf[]的下标off处开始存放,返回值为实际读取的字符数量,该方法必须由子类实现
(3) public abstract int read(char cbuf[],int off,int len) throws IOException;
二、字符输出流Writer
父类 | 子类 | 孙类 |
---|---|---|
Reader java.lang.Appendable java.io.Closeable java.io.Flushable | ||
StringWriter | ||
CharArrayWriter | ||
BufferedWriter | ||
FilterWriter | ||
PipedWriter | ||
OutputStreamWriter | FileWriter | |
PrintWriter |
-
Writer是所有的输出字符流的父类,它是一个抽象类。
-
CharArrayWriter、StringWriter是两种基本的介质流,它们分别向Char数组、String中写入数据。PipedWriter是向与其它线程共用的管道中写入数据,
-
BufferedWriter是一个装饰器为Writer提供缓冲功能。
-
PrintWriter和PrintStream极其类似,功能和使用也非常相似。
-
OutputStreamWriter是OutputStream到Writer转换的桥梁,它的子类FileWriter其实就是一个实现此功能的具体类(具体可以研究一SourceCode)。功能和使用和OutputStream极其类似.
主要方法:
//将整型值c的低16位写入输出流
(1) public void write(int c) throws IOException;
//将字符数组cbuf[]写入输出流
(2) public void write(char cbuf[]) throws IOException;
//将字符数组cbuf[]中的从索引为off的位置处开始的len个字符写入输出流
(3) public abstract void write(char cbuf[],int off,int len) throws IOException;
//将字符串str中的字符写入输出流
(4) public void write(String str) throws IOException;
//将字符串str 中从索引off开始处的len个字符写入输出流
(5) public void write(String str,int off,int len) throws IOException;
FileInputStream
FileOutputStream
FileReader
FileWriter
InputStream
OutputStream
read
write