之前的字节输入输出流能适应任意清空,但实际使用中,我们大多用的还是字节的。
先上继承关系图:
图片摘自:http://www.cnblogs.com/skywang12345/p/io_01.html
输入流Reader
字符输入流的最上级对象是Reader(抽象类)。有以下方法:
方法 | 返回值 | 说明 | 备注 |
---|---|---|---|
read(char cbuf[], int off, int len) | int | 基础核心的读取 | 核心,abstract,抽象方法 |
read(java.nio.CharBuffer target) | int | 读取 | |
read() | int | 读取 | |
read(char cbuf[]) | int | 读取 | |
skip(long n) | long | 跳过字符 | |
ready() | boolean | 判断是否可以读取 | |
markSupported() | boolean | 判断是否支持标记 | |
mark(int readAheadLimit) | void | 标记 | mark和reset配合使用 |
reset() | void | 重置 | |
close() | void | 关闭流 |
另外:
- 包含protected Object lock;的内部成员,用于加锁,保证同步。
输出流Writer
方法 | 返回值 | 说明 | 备注 |
---|---|---|---|
write(char cbuf[], int off, int len) | void | 核心,abstract,抽象方法 | |
write(int c) | void | 写入 | --- |
write(char cbuf[]) | void | 写入 | --- |
write(String str) | void | 写入 | --- |
write(String str, int off, int len) | void | 写入 | --- |
append(char c) | Writer | 连续写入 | 支持append(XXX).append(XXX) |
append(CharSequence csq) | Writer | 连续写入 | 参数可为String,支持append(XXX).append(XXX) |
append(CharSequence csq, int start, int end) | Writer | 连续写入 | 参数可为String,支持append(XXX).append(XXX) |
flush() | void | 情况缓存 | --- |
close() | void | 关闭 | --- |
另外:
- 包含protected Object lock;的1. 内部成员,用于加锁,保证同步。
- 包含private char[] writeBuffer;的内部成员,自带缓存。
- CharSequence是String的接口,所以append(CharSequence csq)这种可以
输入/输出流实现对象
ByteArrayInputStream 和 ByteArrayOutputStream
字符数组的输入输出流:
名称 | 上级继承关系 | 说明 | 核心 | 备注 |
---|---|---|---|---|
CharArrayReader | Reader | char数组的输入流 | 本质: protected char buf[] |
|
CharArrayWriter | Writer | char数组的输出流 | 本质: protected char buf[] |
注:
本身就是字符数组,实际上和ByteArrayInputStream与ByteArrayOutputStream非常相似。
PipedReader和PipedWriter
管道通讯输入输出流:
名称 | 上级继承关系 | 说明 | 核心 | 备注 |
---|---|---|---|---|
PipedReader | Reader | 管道通讯的输入流 | 本质: char buffer[] |
同PipedWriter配合使用 |
PipedWriter | Writer | 管道通讯的输出流 | 本质: private PipedReader sink; |
同PipedReader配合使用 |
InputStreamReader和OutputStreamWriter
字符输入输出流:
名称 | 上级继承关系 | 说明 | 核心 | 备注 |
---|---|---|---|---|
InputStreamReader | Reader | 字符输入流 | 本质: private final StreamDecoder sd; |
new InputStreamReader(InputStream in)的方式创建,从字节流转换,算是一种扩展 |
OutputStreamWriter | Writer | 字符输出流 | 本质: private final StreamEncoder se; |
new OutputStreamWriter(OutputStream out)的方式创建,从字节流转换,算是一种扩展 |
注:
想进行字符串的话,更加的扩展是PrintWriter,new PrintWriter(new FileOutputStream(file))的方式使用。
FileReader和FileWriter
文件字符输入输出流:
名称 | 上级继承关系 | 说明 | 核心 | 备注 |
---|---|---|---|---|
FileReader | InputStreamReader | 文件字符输入流 | 本质: 完全是调用的InputStreamReader |
|
FileWriter | OutputStreamWriter | 文件字符输出流 | 本质: 完全是调用的FileOutputStream |
BufferedReader和BufferedWriter
缓冲字符输入输出流:
名称 | 上级继承关系 | 说明 | 核心 | 备注 |
---|---|---|---|---|
BufferedReader | Reader | 缓冲字符输入流 | 本质: private char cb[] |
有readLine(),可以很方便的读取一行 |
BufferedWriter | Writer | 缓冲字符输出流 | 本质: private char cb[] |
注意,write写入后,不会马上反应,调用flush()清空缓存后反应 |