装饰者模式(Decorator Pattern) Java的IO类的使用方法

Java的IO类使用装饰者模式进行扩展, 其中FilterInputStream类, 就是装饰者(decorator)的基类.

实现其他装饰者(decorator), 需要继承FilterInputStream类.

代码:

/**
 * @time 2014年5月23日
 */
package decorator.io;  

import java.io.FilterInputStream;
import java.io.IOException;
import java.io.InputStream;  

/**
 * @author C.L.Wang
 *
 */
public class LowerCaseInputStream extends FilterInputStream {  

    public LowerCaseInputStream(InputStream in) {
        super(in);
    }  

    public int read() throws IOException {
        int c = super.read();
        return (c==-1 ? c : Character.toLowerCase((char)c));
    }  

    public int read(byte[] b, int offset, int len) throws IOException {
        int result = super.read(b, offset, len);
        for (int i=offset; i<offset+result; ++i) {
            b[i] = (byte)Character.toLowerCase((char)b[i]);
        }
        return result;
    }
}

测试:

/**
 * @time 2014年5月23日
 */
package decorator.io;  

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;  

/**
 * @author C.L.Wang
 *
 */
public class InputTest {  

    /**
     * @param args
     */
    public static void main(String[] args) throws IOException{
        // TODO Auto-generated method stub
        int c;
        try{
            InputStream in = new LowerCaseInputStream(new BufferedInputStream(new FileInputStream("test.txt")));
            while ((c = in.read()) >= 0) {
                System.out.print((char)c);
            }
            in.close();
        } catch (IOException e){
            e.printStackTrace();
        }
    }  

}

通过装饰具体组件类FileInputStream, 实现格式的更改.

注意:Java的文件的默认读取路径为项目的根目录.

本栏目更多精彩内容:http://www.bianceng.cnhttp://www.bianceng.cn/Programming/project/

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索int
, public
, read
, decorator
, ioException
FilterInputStream
,以便于您获取更多的相关知识。

时间: 2024-10-14 18:23:29

装饰者模式(Decorator Pattern) Java的IO类的使用方法的相关文章

装饰者模式(Decorator Pattern) 详解

装饰者模式(Decorator Pattern):动态地将责任附加到对象上. 若要扩展功能, 装饰者提供了比继承更有弹性的替代方案. 使用方法: 1. 首先创建组件(Component)父类, 所有类,具体组件(Concrete Component)和装饰者(Decorator)都属于这一类型, 可以进行扩展; 可以是抽象类(abstract class), 也可以是接口(interface); 代码: /** * @time 2014年5月23日 */ package decorator; /

设计模式学习--装饰者模式(Decorator Pattern)

概念: 装饰者模式(Decorator Pattern): 动态地将功能添加到对象,相比生成子类更灵活,更富有弹性. 解决方案: 装饰者模式的重点是对象的类型,装饰者对象必须有着相同的接口,也也就是有着相同的结构.这样一来,在运行的过程中,就可以将这些对象融合在一起,将相同的属性等成员有机的结合,就像生成另外一种类型一样,而实际上,我们并不需要真的创建这个类型,它是动态生成的.这些装饰者既可以组合,也可以撤销组合,既回复到原来对象状态. 示例介绍: 装饰者模式的关键就是装饰者类型的定义,而其中应

java数据流DataInputstream类中的方法readBoolean()的作用是什么?

问题描述 java数据流DataInputstream类中的方法readBoolean()的作用是什么? 书上说readBoolean()的作用是读取一个布尔值,但是具体是 根据什么得到布尔值的?这个布尔值可以用于什么操作?跪求指点! 解决方案 从输入流读取,如果是0,就是false,否则就是true,bool值可以用来做逻辑判断. 解决方案二: 你写进去的时候的那个值,但需要顺序读取,写入时,第一个如果是int,那就读取时就要readInt,类似这样 解决方案三: JAVA中String类的i

java中看到类写在方法里面的类是什类啊

问题描述 java中看到类写在方法里面的类是什类啊 java中看到类写在方法里面的类是什类啊 void func (){class lei } 解决方案 方法内部的内部类的可见性更小,它只在方法内部可见,在外部类(及外部类的其它方法中)中都不可见了.同时,它有一个特点,就是方法内的内部类连本方法的成员变量都不可访问,它只能访问本方法的final型成员.同时另一个需引起注意的是方法内部定义成员,只允许final修饰或不加修饰符,其它像static等均不可用. 解决方案二: 内部类(匿名内部类) 解

源码-JDK1.7中java.lang.String类的toCharArray方法注释:不能用Arrays.copyOf实现?求解惑

问题描述 JDK1.7中java.lang.String类的toCharArray方法注释:不能用Arrays.copyOf实现?求解惑 JDK1.7重新设计了String类,各个String对象各自维护一个属于自身的char数组,下面是该类中的toCharArray方法的实现源码:public char[] toCharArray() { // Cannot use Arrays.copyOf because of class initialization order issues char

java监听-java中匿名类作为一个方法的参数的时候是不是默认返回一个匿名对象

问题描述 java中匿名类作为一个方法的参数的时候是不是默认返回一个匿名对象 java中匿名类作为一个方法的参数的时候是不是默认返回一个匿名对象 比如用在监听方法当中作为参数的时候 解决方案 可以这么理解,通常是创建一个匿名类的实例然后作为参数传递给指定方法 . 解决方案二: 匿名类,作为参数是返回相应的匿名对象. 具体还是要看调用的函数有参数要求吧,参数是一个对应的匿名类,或者其父类,使用它就没有问题.

java.sql.Connection类中有个方法

问题描述 java.sql.Connection类中有个方法 PreparedStatement prepareStatement(String sql, String[] columnNames) throws SQLException 这个方法中参数的第二个作用是什么,代表什么意思? 下面是org.springframework.jdbc.core.PreparedStatementCreatorFactory中的一段代码 [code=java] public PreparedStateme

java.net.InetAddress类的getHostName方法用来获取某一IP地址的主机名

问题描述 有没有不通过java.net.InetAddress类的getHostName方法用来获取某一IP地址的主机名的方法,而且速度较快的方法:当然要用Java写. 解决方案

设计模式(八)装饰器模式Decorator(结构型)

1. 概述        若你从事过面向对象开发,实现给一个类或对象增加行为,使用继承机制,这是所有面向对象语言的一个基本特性.如果已经存在的一个类缺少某些方法,或者须要给方法添加更多的功能(魅力),你也许会仅仅继承这个类来产生一个新类-这建立在额外的代码上.       通过继承一个现有类可以使得子类在拥有自身方法的同时还拥有父类的方法.但是这种方法是静态的,用户不能控制增加行为的方式和时机.如果  你希望改变一个已经初始化的对象的行为,你怎么办?或者,你希望继承许多类的行为,改怎么办?前一个