学习笔记之java.io包中的字符流(上)—— Reader和Writer

在Bruce Eckel的第四版《Thinking in Java》中介绍Reader和Writer时曾提到,JDK在java.io包中引入了Reader和Writer,并不是要替代1.0中的InputStream和OutputStream,而是为了更好的使用IO,实现国际化(internationalization)。说得直白一些,其实就是我们具体应用中所需IO更多的是字符而非字节,Reader和Writer实现中增加了字符编码解码的机制,把字节流转为字符流,更加方便开发使用。

从Reader的源码实现中我们看到,和InputStream类似,Reader也是抽象类(而非interface),同时提供的方法也和InputStream非常相似。Reader之所以是抽象类,主要是由于下面这个方法没有实现,需要子类提供:

1
abstract public int read( char cbuf[], int off, int len) throws IOException;

同理,Writer的也是:

1
abstract public void write( char cbuf[], int off, int len) throws IOException;

另外,在Reader和Writer的源码中,我们还可以看到在JDK1.5之后增加了许多对NIO的支持。比如类的声明中增加了Readable、Appendable接口等。

细节可参考JDK或者Oracle的API:

http://docs.oracle.com/javase/7/docs/api/java/io/package-summary.html

1. Reader/Writer具体的实现类分析

和InputStream和OutputStream的类似,Reader和Writer也有很多子类,他们分别和InputStream和OutputStream的子类对应,但类层次关系并不完全一样。

原始的Reader和Writer类:

  • CharArrayReader/CharArrayWriter 相当于InputStream和OutputStream中的ByteArrayInputStream和ByteArrayOutputStream
  • PipedReader/PipedWriter 对应PipedInputStream和PipedOutputStream
  • StringReader和StringWriter 和StringBufferInputStream有所类似

而经过“装饰”包装的,还有如下几个:

  • FilterReader/FilterWriter对应FilterInputStream和FilterOutputStream
  • BufferedReader/BufferedWriter 对应BufferedInputStream/BufferedOutputStream
  • LineNumberReader 对应LineNumberInputStream
  • PushbackReader 对应PushbackInputStream
  • PrintWriter 对应PrintStream

功能逻辑上基本都是和字节流一致的,就不一一介绍了。

2. FileReader/FileWriter和InputStreamReader/OutputStreamWriter

FileReader/FileWriter分别是InputStreamReader/OutputStreamWriter的子类。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值