Java_输入输出流详解.doc
文本预览下载声明
HYPERLINK /blog/543584 Java 输入输出流详解
文章分类: HYPERLINK /blogs/category/java Java编程
?? 最近一段时间,处于失业状态,正好有机会对未理解的知识进行整理,面试中这部分的知识很大可能也是会遇到的。下面的内容一部分是从网上筛选的,经过自己的梳理后总结的。
?
Java IO 用的是‘decorator模式’来构建的。要容易理解Java IO 应该从对称性和两个模式(装饰器模式和适配器模式)这两方面进行分析。
?
装饰器模式:
??? 在由InputStream、OutputStream、Reader和Writer 代表的等级结构内部,有一些流处理器可以对另外一些流处理器起到装饰作用,形成新的、具有改善了的功能的流处理器。
?
下面是Decorator模式的结构图:
1.Component就是装饰器模式中公共方法的类,在装饰器模式结构图的顶层。
2.ConcreateComponent是转换器模式中具体的被装饰的类,IO包中的媒体流就是此种对象。
3.Decorator装饰器模式中的核心对象,所有具体装饰器对象的父类,完成装饰器的部分职能。在上面的例子中Decorator类和这里的对应。该类可以只做一些简单的包裹被装饰的对象,也可以还包含对Component中方法的实现……他有一个鲜明的特点:继承至Component,同时包含一个Component作为其成员变量。装饰器模式动机中的动态地增加功能是在这里实现的。
4.ConcreteDecoratorA和ConcreteDecoratorB是两个具体的装饰器对象,他们完成具体的装饰功能。装饰功能的实现是通过调用被装饰对象对应的方法,加上装饰对象自身的方法。这是装饰器模式动机中的添加额外功能的关键。
?
适配器模式:
? 将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 比如ByteArrayInputStream 是一个适配器类,它继承了InputStream,而封装了一个byte数组,换句话说,它将以个byte数组的接口适配成InputStream流处理器的接口。
适配器的结构图:
?
?
下面开始了解Java IO
?? Java IO 中的流从不同的角度可以分成三类:1、按数据流的方向不同可以分为输入流(InputStream/Reader)和输出流(OutputStream/Writer),用户可以从输入流中读取信息,但不能写它。相反,对输出流,只能往往输出流写,而不能读取。2、按处理数据单位不同可以分为字节流(InputStream/OutputStream-8位)和字符流(Reader/Writer-16位)。3、按功能不同可以分为节点流(原始流)和处理流(链接流)。节点流为可以从一个特定的数据源(节点)读写数据(如文件、内存)。处理流是“连接”在已存在的流(节点流或处理流)之上,通过对数据的处理为程序提供更为强大的读写功能。
下面的分析是从功能上来分析的:
?
字节流处理类概述:
?
对于字节流处理的类都继承自InputStream和OutputStream这两个抽象类。
?
InputStream
?
InputStream结构图,从图中可以很清楚的看到装饰器模式的应用。
?
InputStream提供的最重要的方法是:
Java代码?
read();??
read(byte[]?b)?;??
read(byte[]?b,?int?off,?int?len)?;??
?
用于从输入流中读取字节。
?
原始流(也是一个适配器类):(1)ByteArrayInputStream:为多线程的通信提供缓冲区操作,接收一个Byte数据作为流的源。
(2)FileInputStream:建立一个与文件有关的输入流。接收一个File对象作为流的源。
(3)PipedInputStream:可以与PipedOutputStream配合使用,用于读入一个数据管道的数据,接收一个PipedOutputStream 作为源。
(4)StringBufferInputStream:将一个字符串缓冲区转换为一个输入流。接收一个String对象作为流的源。
链接流:(1)FilterInputStream称为过滤输入流,它将另外一个输入流作为流源。这个类的子类包括一下几种。?? BufferedInputStream: 为另一个输入流添加一些功能,即缓冲输入以及支持 mark 和 reset 方法的能力。在创建BufferedInputStream 时,会创建一个内部缓冲区数组。在读取或跳过流中的字节时,可根据需要从
显示全部