java设计模式之装饰器模式以及在java中做用

在JAVA I/O类库里有不少不一样的功能组合状况,这些不一样的功能组合都是使用装饰器模式实现的,下面以FilterInputStream为例介绍装饰器模式的使用html

 

 FilterInputStream和FilterOutputStreamjava

首先,这两个都分别是InputStream和OutputStream的子类。并且,FilterInputStream和FilterOutputStream是具体的子类,实现了InputStream和OutputStream这两个抽象类中为给出实现的方法。数组

可是,FilterInputStream和FilterOutputStream仅仅是“装饰者模式”封装的开始,它们在各个方法中的实现都是最基本的实现,都是基于构造方法中传入参数封装的InputStream和OutputStream的原始对象。htm

 

 

BufferedInputStream/BufferedOutputStream对象

先说说这个最简单的一对,BufferedInputStream和BufferedOutputStream。顾名思义,Buffered就是缓冲了的。在BufferedInputStream和BufferedOutputStream中,都额外实现了byte数组作buffer。blog

咱们知道在父类FilterInputStream和FilterOutputStream类中,已经在构造方法时封装了原始的InputStream或者OutputStream对象。接口

在咱们使用BufferedInputStream和BufferedOutputStream来进行read()和write()调用的时候,并不必定直接对封装的InputStream或者OutputStream对象进行操做,而是要通过缓冲处理。it

在BufferedInputStream的read()中,其实是一次读取了多个字节到缓冲数组,而非一次只读取一个。后续的read()操做能够直接从数组中获取字节,而没必要再次调用封装的InputStream对象的read()操做。这样作其实在必定状况下能够减小底层的read调用次数,下降成本开销,提升了效率。效率

在BufferedOutputStream中也是同样,它的write()会先把数据写到缓冲数组中,直到数据达到了某个特定的限额,再调用write()的时候回真正调用到封装的OutputStream对象的write()方法。方法

 

而DataInputStream/DataOutputStream这一对实际上所作的也就是这两个接口所定义的方法。再DataInputStream/DataOutputStream中,这些方法作了拼接和拆分字节的工做。经过这些方法,咱们能够方便的读取、写出各类咱们实际所面对的类型的数据,而没必要具体去在字节层面上作细节操做。

 

原文连接http://www.cnblogs.com/java-my-life/archive/2012/04/20/2455726.html

相关文章
相关标签/搜索