「布衣码农」Reader 和 Writer是字符家族的始祖。

 1 

功能简介

Reader 和 Writer是字符家族的始祖,Reader读取,Writer写入。与InputStream和OutputStream并列的两外两大家族。Reader 和 Writer规定了字符读取的约定协议,对于这两个始祖,没必要纠结到底是什么,只需要理清楚到底有哪些约定即可。
 2 

Reader

Reader 是一个抽象类
Java IO | Reader与Writer(十七)_java

read方法

他拥有四种形式的read方法,不过最终都是调用那个待实现的方法(下图方法),都是形式的简单封装,从注释看得出来,这个方法是会阻塞的。

标记点功能

对于标记功能来说,Reader默认的是否定三连markSupported返回false;mark抛异常;reset抛异常;

ready

这是一种类似于available的功能,默认是false。
true表示下一个read()方法保证不会阻塞;
不过需要注意的是,返回false并不意味着下一个read一定阻塞;

skip

跳过n个字符,此方法一直阻塞直到 字符可用、发生 I/O 错误或者已到达流的末尾

close

等你实现

Java IO | Reader与Writer(十七)_java_02


小结

Reader多种形式的read,类似InputStream  :要么读取单个字符,作为整数读取的字符,范围在 0 到 65535 之间 (0x00-0xffff),如果已到达流的末尾,则返回 -1。要么就是读取后的数据;
存储到某个字符数组;或者某个字符数组的指定位置开始存储;或者是character 缓冲;
他也有有关标记的约定,Reader中默认是否定三连。提供了ready类似于字节中的available ,也有close方法从方法列表中看的出来,至少需要实现的方法只有 read(char[], int, int) 和 close() 

 3 

Writer

写入字符流的抽象类,类的层次结构也很简单
Java IO | Reader与Writer(十七)_java_03Java IO | Reader与Writer(十七)_java_04

write


共有五个版本,其余四个版本的write都是调用的待实现的抽象write方法(第五个)
1. 写入指定字符
2. 写入指定字符数组
3. 写入指定字符数组的一部分 off开始  len长度
4. 写入字符串
抽象方法写入字符串的一部分


append

方法如其名,追加形式有下列三种:追加一个字符;追加一个字符序列;追加一个字符序列的指定部分

Java IO | Reader与Writer(十七)_java_05


flush与close

毕竟Reader与Writer都是抽象构建,用于协议描述,所以没有实际的关闭与刷新,所以是抽象方法Java IO | Reader与Writer(十七)_java_06

小结

Writer是字符写的抽象类
综上,想要实现Writer 至少需要实现 write(char[], int, int)、flush() 、 close() 
write方法的各个版本跟OutputStream体系中的思路一样,都是把各种形式的数据写入到流中,写入还有额外的append  追加的性质,提供了三个版本的append 。


https://mp.weixin.qq.com/s/vDo30hkVNJ1s440t1WhniA