数据压缩流(Data Compression Streams): Java IO库提供了ZIP和GZIP压缩算法的支持。你可以使用装饰器模式来包装一个输入/输出流,以提供压缩和解压缩功能。 // 包装一个文件输入流,使用GZIP压缩FileInputStreamfis=newFileInputStream("file.txt");GzipInputStreamgis=newGzipInputStream(fis);// 包装一个文件输出流,...
read()方法中最重要的就是获取输入流和填充 获取的输入流其实就是父类中的受委托对象,在这里就是FileInputStream类型的输入流 填充实际上是调用受委托类中的native属性的方法 这其实不是一个“正规”的装饰器模式,扯得有点远了 所以说,在装饰器模式下,最重要的就是装饰器和受委托对象的结合 为了具有一样的功能...
使用完流后应该调用其 close() 方法将流关闭,流关闭时,将会先flush,后关闭。 在输入流InputStream中,可以通过 int read() 方法来从流中读取一个字节,批量读取字节可以通过 int read(byte[] b) 或者 int read(byte[] b, int off, int len) 来实现,这两个方法的返回值为实际读取到的字节数。如果需要重复...
ConcreteDecorator装饰类,实现具体的装饰功能。 三、装饰模式示例 上班路上,路过一个卖煎饼果子的摊位,摊位前围着一些买煎饼的人。卖煎饼的大妈手法娴熟,左手舀一勺面糊到鏊子上,右手拿刮板唰唰绕两圈,一张厚薄均匀的煎饼就成型了,大妈左手抓一颗鸡蛋在鏊子边上一磕,举到煎饼正中,手指一掰,整团蛋黄就落到了煎饼上...
Java中的IO流是典型的装饰者模式 下面来看一行简短的代码: 扩展一个接口,定义一个抽象的方法,这个接口实际上就是一个被装饰者类 interface Work { public void work(); } 1. 2. 3. 画画类: class Drawing implements Work { //实现接口 @Override ...
IO中的体现(以InputStream为例) 抽象构件角色:由InputStream扮演,这个抽象类为各种子类型流处理器提供统一的接口。 具体构件角色:由FileInputStream、ObjectInputStream 、ByteArrayInputStream 等原始流处理器扮演,他们实现了InputStream的接口,可以被装饰器装饰。
下文以过滤输入流为例,介绍所运用的装饰器设计模式,并介绍过滤输入流的用法。 InputStream类声明的read()方法按照流中字节的先后顺序读取字节,FileInputStream和ByteArrayInputStream等具体的输入流都按照这种方式读数据。 假如希望进一步扩展读数据的功能,一种方式是创建FileInputStream等输入流的子类,但是这会大大增加输...
java中io包运用到了装饰器模式,下面是java中io的类结构图: 无论是哪种编程语言,输入跟输出都是重要的一部分,Java也不例外,而且Java将输入/输出的功能和使用范畴做了很大的扩充。它采用了流的机制来实现输入/输出,所谓流,就是数据的有序排列,而流可以是从某个源(称为流源或Source of Stream)出来,到某个目的...
在介绍javaIO库所体现的设计模式之前,我们先来了解javaIO整个库。 IO流.jpeg javaI/O库具有两个对称性,它们分别是: 输入-输出对称:比如InputStream和OutputStream各自占据Byte流的输入和输出的两个平行的等级结构的根部;而Reader和Writer各自占据Char流的输入和输出的两个平行的等级结构的根部。
System.out.println("还可以投影,在墙壁上显示"); } } IO流体系中使用装饰器模式 IO流体系中大量使用了装饰器模式,让流具有更强的功能、更强的灵活性。比如: FileInputStream fis =newFileInputStream(src); BufferedInputStream bis =newBufferedInputStream(fis); ...