— 1 —
功能简介
Reader 和 Writer是字符家族的始祖,Reader读取,Writer写入。与InputStream和OutputStream并列的两外两大家族。Reader 和 Writer规定了字符读取的约定协议,对于这两个始祖,没必要纠结到底是什么,只需要理清楚到底有哪些约定即可。
— 2 —
Reader
Reader 是一个抽象类
read方法
他拥有四种形式的read方法,不过最终都是调用那个待实现的方法(下图方法),都是形式的简单封装,从注释看得出来,这个方法是会阻塞的。
标记点功能
对于标记功能来说,Reader默认的是否定三连markSupported返回false;mark抛异常;reset抛异常;
ready
这是一种类似于available的功能,默认是false。
true表示下一个read()方法保证不会阻塞;
不过需要注意的是,返回false并不意味着下一个read一定阻塞;
skip
跳过n个字符,此方法一直阻塞直到 字符可用、发生 I/O 错误或者已到达流的末尾。
close
等你实现
小结
Reader多种形式的read,类似InputStream :要么读取单个字符,作为整数读取的字符,范围在 0 到 65535 之间 (0x00-0xffff),如果已到达流的末尾,则返回 -1。要么就是读取后的数据;
存储到某个字符数组;或者某个字符数组的指定位置开始存储;或者是character 缓冲;
他也有有关标记的约定,Reader中默认是否定三连。提供了ready类似于字节中的available ,也有close方法从方法列表中看的出来,至少需要实现的方法只有 read(char[], int, int) 和 close()
— 3 —
Writer
写入字符流的抽象类,类的层次结构也很简单
write
共有五个版本,其余四个版本的write都是调用的待实现的抽象write方法(第五个)
1. 写入指定字符
2. 写入指定字符数组
3. 写入指定字符数组的一部分 off开始 len长度
4. 写入字符串
抽象方法写入字符串的一部分
append
方法如其名,追加形式有下列三种:追加一个字符;追加一个字符序列;追加一个字符序列的指定部分
flush与close
毕竟Reader与Writer都是抽象构建,用于协议描述,所以没有实际的关闭与刷新,所以是抽象方法
小结
Writer是字符写的抽象类
综上,想要实现Writer 至少需要实现 write(char[], int, int)、flush() 、 close()
write方法的各个版本跟OutputStream体系中的思路一样,都是把各种形式的数据写入到流中,写入还有额外的append 追加的性质,提供了三个版本的append 。
https://mp.weixin.qq.com/s/vDo30hkVNJ1s440t1WhniA