码迷,mamicode.com
首页 > 编程语言 > 详细

java io流 分析

时间:2017-05-09 14:51:41      阅读:146      评论:0      收藏:0      [点我收藏+]

标签:tin   read   继承   梳理   src   pre   []   fileread   bsp   

java io流 在java应用或者android应用中很常见,并且使用频率很高的一个模块。当时每次需要用到这个模块的时候总是有提笔忘字的感觉,不知道该用哪个流或者该用谁包装谁。

所以我就花了一点时间把这个块的结构梳理了一下。一是能让自己理清一下思路。二是以后如果还有提笔忘字的时候,看这篇文章就好了。

首先java io流分两大系统InputStream 和Reader,前者及其子类主要用于读取字节流,后者及其子类主要用于读取字符流。下面是InputSteram系的继承树

技术分享

 首先可以看InputStream类的结构,里面定义几个read方法,比如:

public abstract int read()
public int read(byte b[]) throws IOException
public int read(byte b[], int off, int len) throws IOException

其中后两个方法给出了具体实现,并且最终调用的都是第一个抽象方法。因此,第一个抽象方法才是核心。
那么我们再来看看InputStream的子类,其中FilterInputStream比较特别,这个类在构造
的时候需要传入一个InputStream对象。而里面read方法也是调用传入的InputStream对象来实现的,可以说这就是一个装饰类。而其他的四个子类FileInputStream,ByteArrayInputStream
PipedInputStream,ObjectInputStream.则是从不同的介质中读取数据,因此他们分别已自己特有的方法实现了
public abstract int read()这个抽象函数。


好了,下面说说Reader,reader系统是用来读取字符流的。
同样,Reader里面也定义了好几个read方法,最重要的被抽象了
abstract public int read(char cbuf[], int off, int len) throws IOException;

来看看Reader下面几个比较重要的子类。

技术分享

 

Reader下面最重要的一个子类是InputStreamReader,这个类的构造方法需要一个InputStream对象,说明Reader还是要依赖InputStream读取的,然后再看看细节,发现是把InputStream
转成了StreamDecoder,而这个streamDecoder就可以按照指定的字符集来读取出char数组了。而FileReader集成InputStreamReader,其实只是加了一个构造方法,基本跟InputStream一样。
另外几类StringReader,CharArrayReader的构造方法分别传入的是String 和char数组,已经是有特定字符集了,所以不要再出入另外的reader对象了,而BuffedReader则需要传入另外的reader
来读取字符。

  这里只是简单描述了一下inputStream 和 reader ,与之对应的outputStream,writer也是也是一样。








java io流 分析

标签:tin   read   继承   梳理   src   pre   []   fileread   bsp   

原文地址:http://www.cnblogs.com/yanzheng216/p/6803007.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!