学习笔记之java.io包中的字符流(上)—— Reader和Writer
来源:互联网 发布:大韩帝国知乎 编辑:程序博客网 时间:2024/05/17 23:47
在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之所以是抽象类,主要是由于下面这个方法没有实现,需要子类提供:
abstract
public
int
read(
char
cbuf[],
int
off,
int
len)
throws
IOException;
同理,Writer的也是:
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的子类。
- 学习笔记之java.io包中的字符流(上)—— Reader和Writer
- Java-IO之字符输入输出流(Reader和Writer)
- Java IO 字符流 Reader和Writer
- Java中的字符流Reader和Writer
- Java IO操作——字节流(OutputStream、InputStream)和字符流(Writer、Reader)
- Java IO操作——字节流(OutputStream、InputStream)和字符流(Writer、Reader)
- Java - IO - 字符流 - Writer - Reader
- java IO之字节流和字符流-Reader和Writer以及实现文件复制拷贝
- IO流之----字符流(Reader和Writer)和其它流
- JAVA 的IO操作(三) 字符输出流和输入流:Writer和Reader
- java IO笔记(Reader/Writer)
- 学习笔记之java.io包中的字节流(上)—— 基本的InputStream和OutputStream
- Java IO(十二):Reader 和 Writer
- Java IO之Reader/Writer
- Java知识(字符流Reader和Writer)
- Java基础--------(7)IO流Reader和Writer
- 学习笔记之java.io包中的字节流(下)—— FilterInputStream和FilterOutputStream
- 黑马程序员_学习笔记:13) IO流: 字节流(InputStream、OutputStream)、字符流(Reader、Writer)、File类、递归
- ASP.NET MVC 5 (六-2) 使用Razor表达式
- Accessibility辅助功能--一念天堂,一念地狱
- Kafka概览
- 学习笔记之Java IO整理概要
- matlab textread用法详解
- 学习笔记之java.io包中的字符流(上)—— Reader和Writer
- 46.android开启服务,调用服务里面的方法
- 学习笔记之Java7中的ForkJoin并发框架初探(下)—— ForkJoin的应用
- PHP 正则取 url 参数
- Gstreamer插件教程2.3—编写一个插件(Writing a Plugin):chain函数(The chain function)
- SQL Server 查询所有外键子父表关系
- 单片机周期的概念
- 图标元素动画效果
- 周易六十四卦—水泽节卦