IO笔记(下)--字符单位的输出输出流

Posted 常烦常乐

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了IO笔记(下)--字符单位的输出输出流相关的知识,希望对你有一定的参考价值。

之前的字节输入输出流能适应任意清空,但实际使用中,我们大多用的还是字节的。

先上继承关系图:
图片摘自: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 关闭流

另外:

  1. 包含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 关闭 ---

另外:

  1. 包含protected Object lock;的1. 内部成员,用于加锁,保证同步。
  2. 包含private char[] writeBuffer;的内部成员,自带缓存。
  3. 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()清空缓存后反应

以上是关于IO笔记(下)--字符单位的输出输出流的主要内容,如果未能解决你的问题,请参考以下文章

JAVA IO流常见问题

Java IO流--Reader流(字符输入流) & Writer流(字符输出流)

理解Java之IO流

IO流

67.输入输出字符流

13:IO流