五、04【Java IO模型】之字符流

本文详细介绍了Java中的字符流,包括Reader和Writer抽象类及其主要子类,如BufferedReader、BufferedWriter、CharArrayReader、CharArrayWriter、InputStreamReader、OutputStreamWriter、FileReader、FileWriter、PipedReader和PipedWriter等。讲解了它们的功能、构造函数和应用场景,强调了BufferedReader和BufferedWriter在提高读写效率方面的作用。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值