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

Java IO两大体系

时间:2015-03-28 21:52:00      阅读:224      评论:0      收藏:0      [点我收藏+]

标签:java   设计模式   字符流   iostream   

区别

一套是input/output stream 体系,一套是reader/writer体系,两者的区别是

stream负责的是字节流的数据,reader/writer负责的是字符流。


设计模式

decorator模式

该模式主要用于在不改变已有的component设计和代码的情况下,不断的增加附属功能。打个比喻,就像你有一副画,为它配一个或者多个不同的画框。

具体可以参考这里:http://www.cnblogs.com/bastard/archive/2012/02/02/2336150.html

componnet要支持decorator的基本接口才行,这是设计时必须要做的。


两套IO 体系都是典型的decorator模式。下面的文章是介绍的比较好的。

http://my.oschina.net/gao0516/blog/136103


adapter模式

该模式用于将一个对象转换成另一个对象能用使用的接口。两种体系内部均有这样的实现。同时两种模式互相联通也依赖这种模式。主要是两个类:

InputStreamReader和OutputStreamWriter

从名字都可以看出来,既有stream又有reader/writer, 典型跨体系adapter。


举个例子,如果想用writer写文件,代码如下:

    static private void test2() {
        try {
            PrintWriter printWriter = new PrintWriter("/home/dean/test2.log");
            printWriter.println("hello, 中国");
            printWriter.flush();
            printWriter.close();
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }

运行后,test2.log文件被创建,里面出现了hello,中国。


但是有一个问题,PrintWriter的构造函数不接受append选项,因此每次都是将文件清除后重新写,不能支持追加写。而stream体系里面支持。因此这里采用adapter模式来混用使用两种体系。

    static private void test1() {
        try {
            Writer w = new OutputStreamWriter(new FileOutputStream("/home/dean/test1.log", true), "UTF-8");
            PrintWriter printWriter = new PrintWriter(w);
            printWriter.println("hello, 中国");
            printWriter.flush();
            printWriter.close();
        } catch (IOException e) {
            System.out.println(e.getMessage());
        }
    }

利用了FileOutputStream支持append特性,用OutputStreamWriter做adapter,现在可以了。


所以看上去reader/writer体系功能侧重于文本字符处理,而对一些流操作的高级功能,还是要依赖stream体系的配合。








Java IO两大体系

标签:java   设计模式   字符流   iostream   

原文地址:http://blog.csdn.net/csfreebird/article/details/44705765

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