`
pengzhoushuo
  • 浏览: 12501 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

JDK源码研究之IO浅析

JDK 
阅读更多
典型的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
2
分享到:
评论
1 楼 mercyblitz 2010-06-29  
引用
Reader与Writer可没有Stream那么复杂


?都不复杂吧

相关推荐

Global site tag (gtag.js) - Google Analytics