JDK源码研究之IO浅析

典型的IO操作是以InputStream的read和OutputStream的wite(byte b)为标准,InputStream一次接收一个或多个字节,而OutputStream则一次写入一个或多个字节。
从JDK1.1开始又出现了以字符操作为标准的Reader和Write,Reader一次读取一个或多个字符,而Writer一次写入一个或多个字符。整个IO操作都是围绕这个主题展开的。
InputStream:
ByteArrayInputStream
FileInputStream
ObjectInputStream
PipedInputStream
SequenceInputStream
StringBufferInputStream,已过时,在旧版本中用以读取一个字节。已被Reader相应的子类代替
FilterInputStream
BufferedInputStream
......

OutputStream:
ByteArrayOutputStream
FilterOutputStream
BufferedOutputStream
......
FileOutputStream
ObjectOutputStream
PipedOutputStream

Reader:
BufferedReader
CharArrayReader
InputStreamReader
PipedReader
StringReader

Writer:
BufferedWriter
CharArrayWriter
OutputStreamWriter
PipedWriter
PrintWriter
StringWriter
1、InputStreamReader 是字节流InputStream通向字符流的桥梁,通过包装InputStream便可以以Reader的方式读取字符。
2、OutputStreamWriter 是字符流OutputStream通向字节流的桥梁,通过包装OutputStream便可以以Writer的方式写入字符。
3、FileInputStream和FileOutputStream是两个比较特别的类,这两个类分别持有InputStream的OutputStream的引用,通过装饰者模式,可以很方便地添加一些额外的功能。
BufferedInputStream和BufferedOutputStream便是这两个类的子类,提供了buffer能力,减少与物理设备的交互。
4、Reader与Writer可没有Stream那么复杂,BufferedReader和BufferedWriter,分别直接继承自Reader和Writer类。
5、Reader与Writer是以平台默认的编码来读取或写入字符的,需要指定编码时则使用InputStreamReader和OutputstreamWriter。
6、正是由于使用了装饰者模式,才造就了今天写IO代码时一层层包装的”不美观“。这一层层的包装并不需要特别记忆,都有它的特点。
当你需要使用基于字节流的文件流时 new FileInputStream,外层加一个BufferedInputStream减少与磁盘的交互,则成了InputStream = new BufferedInputStream(new FileInputStream()); OutputStream也同理;
当你需要使用基于字符流的文件流时 new FileReader,同样需要加buffer,则成为new BufferedReader(new FileReader())。需要特别指定编码时,则成为 new BufferedReader(new InputStreamReader(new FileInputStream(path),encoding));
7、InputStream、OutputStream、Reader、Writer均为抽象类
8、ObjectInputStream和ObjectOutputStream分别用于基本类型的读写操作。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值