Java IO两大体系

区别

一套是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体系的配合。

时间: 2024-12-28 16:22:05

Java IO两大体系的相关文章

Java Spring 两大特色

0 引言 本文主要描述的是Spring常用的两大特色功能:AOP和IoC容器 1 IoC Spring的IoC:就是常说的“控制反转”,也又叫依赖注入的(DI). 优点:IoC最大的好处就是把对象生成放在了XML里定义,所以当我们需要换一个实现子类将会变得很简单(说的是基于接口的编程),只需要修改XML就可以了,这样我们不用重新编译即可运行,甚至可以实现对象的热插拔. 缺点:由于对象的生成使用了反射编程,所以也给它带来了影响效率的缺点,但是相对于它能提高可维护性和灵活性,这点损耗也就不算什么了,

JAVA IO ( 两种打印流 )

<!--字符打印流--> public class CharDemo { public static void main(String[] args) throws Exception { // 创建字符打印流 PrintWriter p = new PrintWriter(new FileWriter(new File("src/打印流_输出流/text.txt"), true)); p.print("黄伟强"); p.println(); p.pri

Java IO流详尽解析(大神之作)

流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象.本质其实就是基于字节流读取时,去查了指定的码表.字节流和字符流的区别

Java学习之==&gt;IO文件操作体系

一.概述 在整个 Java.io 中最重要的就是5个类和一个接口.5个类指的是 File.InputStream.OutputStream.Reader.Writer,一个接口指的是Serializable.掌握了这些IO的核心操作那么对于Java中的IO体系也就有了一个初步的认识了. File(文件类):主要用来描述文件或目录的属性,例如:文件大小,修改文件名,删除文件,判断文件所在路径等. InputStream(字节输入流):抽象类,基于字节的输入操作,是所有输入流的父类.定义了所有输入流

JAVA基础知识之IO——Java IO体系及常用类

Java IO体系 个人觉得可以用"字节流操作类和字符流操作类组成了Java IO体系"来高度概括Java IO体系. 借用几张网络图片来说明(图片来自 http://blog.csdn.net/zhangerqing/article/details/8466532 )  基于字节的IO操作 基于字符的IO操作   从上图可以看到,整个Java IO体系都是基于字符流(InputStream/OutputStream) 和 字节流(Reader/Writer)作为基类,根据不同的数据载

J2SE知识点归纳笔记(七)---Java IO Part 2:获取键盘输入与IO流体系图

J2SE知识点归纳笔记(七)---Java IO Part 2:获取键盘输入与IO流体系图                                                                 --转载请注明出处:coder-pig 本节引言: 好了,上一节中我们给大家介绍了File与RandomAccessFile类的用法,本节我们还是讲一些 常用的东西,如果学过C++或者C的朋友都知道,获取键盘的输入都很简单,scanf( )和cin就可以 获得我们从控制台输入的参

为什么branch prediction和cache是硬件体系结构中两大研究主题?

摘要: 本文主要通过简单的量化计算的例子,来说明为什么硬件体系结构研究中branch prediction和cache是两大 研究的主题. 基本概念介绍: 描述案例之前,我们简单的介绍几个概念: 1. CPI:cycle-per-instruction,即每条指令需要的时钟周期数,对于理想的处理器,我们认为一条指令就需要一个 时钟周期,也即CPI=1.0; 2. IPC:instruction-per-cycle,即每个时钟可以执行多少条指令,即CPI的倒数: 3. 假设理想的CPI=1.0,但

Java IO流体系中常用的流分类

Java输入/输出流体系中常用的流分类 (表内容来自http://www.cnblogs.com/moonpool/p/5488463.html) 注:下表中带下划线的是抽象类,不能创建对象.粗体部分是节点流,其他就是常用的处理流. 流分类 使用分类 字节输入流 字节输出流 字符输入流 字符输出流   抽象基类 InputStream OutputStream Reader Writer 节点流 访问文件 FileInputStream FileOutStream FileReader File

首先java中集合类主要有两大分支

本文仅分析部分原理和集合类的特点,不分析源码,旨在对java的集合类有一个整体的认识,理解各个不同类的关联和区别,让大家在不同的环境下学会选择不同的类来处理. Java中的集合类包含的内容很多而且很重要,很多数据的存储和处理(排序,去重,筛选等)都需要通过集合类来完成. 首先java中集合类主要有两大分支: (1)Collection (2)Map 先看它们的类图: (1)Collection Collection (2)Map Map 可以看到它们之间的关系纷繁复杂,如果不系统的学习一下,还真