Java io控制 转载转载笑着 胖胖兰原创,转载请注明。
2008-10-21 22:50
295 查看
笑着 胖胖兰原创,转载请注明。
bluesmile979@hotmail.com
http://blog.csdn.net/bluesmile979/archive/2008/10/20/3111403.aspx[/b]
Java号称提供了强大的io控制,恩,实际上也确实挺强大的。但是,面对着那么多的io类,开始的时候会有些头晕。
Java为了使用尽量少的类提供尽量强大的io功能,在io设计的时候采用了Decorator也就是中文中的装饰模式。装饰模式是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。没学过设计模式不要紧,从名称上就能感知1,2了。简单来说,就是包装,外挂,以使其除了本身的基本功能使外同时可以具有一些客户需要的特定功能。基本功能由本体Component实现。包装,外挂由Decorator来实现。下面是Decorator的UML图。
看不懂也没有关系,有一个比较简单的示意图。
就是一层一层的包装,还是比较容易理解的吧?好了,先记住上面这个比较容易理解的图例吧。接下来我们先给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);这样就可以直接从控制台读取字符或者输入行内容了。
bluesmile979@hotmail.com
http://blog.csdn.net/bluesmile979/archive/2008/10/20/3111403.aspx[/b]
Java号称提供了强大的io控制,恩,实际上也确实挺强大的。但是,面对着那么多的io类,开始的时候会有些头晕。
Java为了使用尽量少的类提供尽量强大的io功能,在io设计的时候采用了Decorator也就是中文中的装饰模式。装饰模式是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。没学过设计模式不要紧,从名称上就能感知1,2了。简单来说,就是包装,外挂,以使其除了本身的基本功能使外同时可以具有一些客户需要的特定功能。基本功能由本体Component实现。包装,外挂由Decorator来实现。下面是Decorator的UML图。
看不懂也没有关系,有一个比较简单的示意图。
Decorator1 |
Decorator2 |
Component |
就是一层一层的包装,还是比较容易理解的吧?好了,先记住上面这个比较容易理解的图例吧。接下来我们先给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);这样就可以直接从控制台读取字符或者输入行内容了。
相关文章推荐
- 【原创】基于SpringMVC的注解式权限控制--转载请注明出处
- Core Aduio API--Vista中音量控制的新特点(原创,转载请注明出处)
- 转载:tomcat启动时报:IOException while loading persisted sessions: java.io.EOFException的解决方案
- [转载]如何才算掌握Java(J2SE篇) dulu 原创
- 【原创】Spring-boot快速入门(二)JPA数据源--转载请注明出处
- Python NLTK学习6(创建词性标注器)除特别注明外,本站所有文章均为刘杰的个人网站原创 转载请注明出处: http://www.burnelltek.com/blog/60740e24d2f
- java数字图像处理基础使用imageio写图像文件示例(转载)
- java 回调模式 (部分转载,部分原创)
- sas proc sql 基础入门 (原创作品,转载请注明出处 )
- PHP xdebug eclipse subversion SVN phpunit xmapp 企业级团队开发环境搭建 集成单元测试 花样调试 版本控制 张迅雷原创 欢迎转载
- 关于如何在java中实现中文首字母索引排序的问题 2016-08-25 15:14 86人阅读 评论(0) 收藏 举报 分类: Java(19) 版权声明:本文为博主原创文章,未经博主允许不得转载
- 【原创加转载】java 计算两个时间之间的间隔
- 5) 函数特征functionTraits [原创,泛型编程,自由下载转载,需注明出处]
- 【转载】J2SE知识点归纳笔记(七)---Java IO Part 2:获取键盘输入与IO流体系图
- 原创:产品经理的14条军规。(转贴请注明来自5G 常佳军http://www.5gme.com/space.php?uid=17341&do=blog&id=23168——转载本作者不收取费用,否则等着收律师事务所的律师信)
- Tomca不生产日志 (原创帖,转载请注明出处)
- [转]Java IO完全总结(转载)
- S3C2450自动升级[原创作品,转载请注明出处]
- 9) 泛型数学运算符函数mathOperator [原创,泛型编程,自由下载转载,需注明出处]
- 尊重原创,转载请注明出处