Reader介绍
public abstract class Reader implements Readable, Closeable {}
用于读取字符流的抽象类。子类必须实现的唯一方法是read(char[],int,int)和close()。
属性&方法
// 用于同步此流上的操作的对象。为了提高效率,字符流对象可以使用自身以外的对象来保护关键部分。
// 因此,子类应该使用此字段中的对象,而不是此字段或同步方法。
protected Object lock;
// 读取单个字符。此方法将阻塞,直到出现可用的字符、发生I/O错误或到达流的末尾。
public int read() throws IOException {}
// 将字符读入数组。此方法将阻塞,直到有可用的输入、发生I/O错误或到达流的末尾。
public int read(char[] cbuf) throws IOException{}
// 关闭流并释放与之关联的任何系统资源。一旦流被关闭,进一步的read()、ready()、mark()、reset()或skip()调用将抛出一个IOException。
// 关闭之前关闭的流没有任何效果
public abstract void close() throws IOException{}
// 跳过字符。此方法将阻塞,直到有可用的字符、发生I/O错误或到达流的末尾。
public long skip(long n) throws IOException{}
子类体系结构图
Writer介绍
public abstract class Writer implements Appendable, Closeable, Flushable {}
用于写入字符流的抽象类。子类必须实现的唯一方法是write(char[]、int、int)、flush()和close()。
属性&方法
// 用于存放字符串和单个字符写操作的临时缓冲区
private char[] writeBuffer;
// 写入缓冲大小,必须大于1
private static final int WRITE_BUFFER_SIZE = 1024;
// 用于同步此流上的操作的对象。为了提高效率,字符流对象可以使用自身以外的对象来保护关键部分。
// 因此,子类应该使用此字段中的对象,而不是此字段或同步方法。
protected Object lock;
// 写入不同类型
public void write(int c) throws IOException{}
public void write(char[] cbuf) throws IOException{}
public void write(String str) throws IOException{}
// 写入字符串指定内容
public void write(String str, int off, int len){}
// 刷新流。如果流在缓冲区中保存了来自各种write()方法的任何字符,则立即将其写入预期的目的地。
// 然后,如果目的地是另一个字符流或字节流,则刷新它。
// 因此,一次flush()调用将刷新writer和OutputStreams链中的所有缓冲区。
public abstract void flush() throws IOException{}
// 关闭流,先flush它。一旦流被关闭,进一步的write()或flush()调用将导致抛出IOException。关闭之前关闭的流没有任何效果。
public abstract void close() throws IOException{}
... ...
子类体系结构图
Reader&Writer子类
大多数子类将重写两个抽象类定义的一些方法,以提供更高的效率或附加功能。
BufferedReader&BufferedWriter
为了提高字符流读写的效率,引入了缓冲机制,进行字符批量的读写,提高单个字符读写的效率。
BufferedReader用于加快读取字符的速度,BufferedWriter用于加快写入的速度;
BufferedReader 从字符输入流读取文本,缓冲字符,以便高效读取字符、数组和行。可以指定缓冲区大小,也可以使用默认大小。默认值对于大多数情况都够用。
通常,读取器发出的每个读取请求都会导致底层字符或字节流发出相应的读取请求。因此,建议将BufferedReader包装在任何read()操作可能代价高昂的读取器周围,例如FileReaders和InputStreamReaders。例如:BufferedReader in = new BufferedReader(new FileRead