转:
http://blog.csdn.net/bluesmile979/archive/2008/10/20/3111403.aspx
就是一层一层的包装,还是比较容易理解的吧?好了,先记住上面这个比较容易理解的图例吧。接下来我们先给Java的io归归类。
Java的io里面最基础的是InputStream,OutputStream,Reader,Writer,其中Stream读取的是单字节,它将数据读取到byte[]里面,它读取的是字符对应的acsii码。Reader,Writer读取的是双字节,它读取的是实际的字符,它可以设定采取什么编码来进行读写,它提供了readLine()方法。
好了,基础的两大阵营出来了,读取ascii码的Stream与读取实际字符的XXXer。
然后是一些前缀,常用的有Buffered,File,那么前缀后缀连接起来,这个io类的功能就出来了。BufferedInputStream就是提供缓冲功能支持的读取ascii码的类,FileInputStream就是从文件读取ascii码的类,那么谁是实体,谁是装饰,很明显。
我们头脑里要有一个最基础的概念,就是总要有一个什么类来负责跟具体的标准输入输出(比如文件,比如控制台)打交道,实现这个最基本的跟便准输入输出打交道的类就是Component,再此之上,我们需要的功能就要考虑是否有对应的Decorator帮忙实现,比如缓冲功能。然后,就很简单了。
BufferedInputStream bis = new BufferedInputStream(new FileInputStream());
一层一层的包装,包装多少层随便你,我们要做的就是确认我要跟文件打交道,那么FileInputStream是最基本的,需要被包装的,其他需要的功能,去查找那各类实现了这个功能,然后包装一下就OK了。
另外还有一个事情是我们需要知道的。Stream跟XXXer两大阵营,他们各自提供各自的功能,但是他们可能需要沟通,这里Java的io提供了StreamXXXer类,比如
new InputStreamReader(System.in); 这样就可以直接从控制台读取字符或者输入行内容了。
推荐人评论
就是一层一层的包装,还是比较容易理解的吧?好了,先记住上面这个比较容易理解的图例吧。接下来我们先给Java的io归归类。
Java的io里面最基础的是InputStream,OutputStream,Reader,Writer,其中Stream读取的是单字节,它将数据读取到byte[]里面,它读取的是字符对应的acsii码。Reader,Writer读取的是双字节,它读取的是实际的字符,它可以设定采取什么编码来进行读写,它提供了readLine()方法。
好了,基础的两大阵营出来了,读取ascii码的Stream与读取实际字符的XXXer。
然后是一些前缀,常用的有Buffered,File,那么前缀后缀连接起来,这个io类的功能就出来了。BufferedInputStream就是提供缓冲功能支持的读取ascii码的类,FileInputStream就是从文件读取ascii码的类,那么谁是实体,谁是装饰,很明显。
我们头脑里要有一个最基础的概念,就是总要有一个什么类来负责跟具体的标准输入输出(比如文件,比如控制台)打交道,实现这个最基本的跟便准输入输出打交道的类就是Component,再此之上,我们需要的功能就要考虑是否有对应的Decorator帮忙实现,比如缓冲功能。然后,就很简单了。
BufferedInputStream bis = new BufferedInputStream(new FileInputStream());
一层一层的包装,包装多少层随便你,我们要做的就是确认我要跟文件打交道,那么FileInputStream是最基本的,需要被包装的,其他需要的功能,去查找那各类实现了这个功能,然后包装一下就OK了。
另外还有一个事情是我们需要知道的。Stream跟XXXer两大阵营,他们各自提供各自的功能,但是他们可能需要沟通,这里Java的io提供了StreamXXXer类,比如
new InputStreamReader(System.in); 这样就可以直接从控制台读取字符或者输入行内容了。
推荐人评论
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9474419/viewspace-483808/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/9474419/viewspace-483808/