Java FilterReader类

FilterReader是实现自定义过滤输入字符流的基类,本事是一个抽象类、为所有装饰类提供一个标准、只是简单重写了父类Reader的所有方法、要求子类必须重写核心方法、和提供具有自己特色的方法、这里没有像字节流那样有很多的子类来实现不同的功能、可能是因为字符流本来就是字节流的一种装饰、所以在这里没有必要再对其进行装饰、只是提供一个扩展的接口而已。

构造函数

protected FilterReader(Reader in)   使用传入的底层字符输入流创建FilterReader  

关键字

protected Reader in;    底层字符输入流  

方法

void close();   关闭此流  
boolean markSupport()       检测此流是否支持mark  
void mark()     标记此流  
void reset()    重置最后一次mark的位置  
int read()      读取一个字符  
int read(char[] b, int off, int len)    将字符读取到字符数组b中  
boolean ready();    检测此流是否可以读取  
long skip(long n)   跳过底层输入流中的n个字符  

源码分析

/** 
 * 本身是一个抽象类、只简单重写了父类Reader的一些方法、作用是为所有装饰类提供一个标准、 
 * 子类要重写父类的核心方法和扩展具有自己特色的方法、目前没有子类、作用是为以后的扩展提供一个接口 
 */  
public abstract class FilterReader extends Reader {  
    /**底层字符输入流*/  
    protected Reader in;  
  
    /** 使用传入的底层字符输入流创建FilterReader*/  
    protected FilterReader(Reader in) {  
        super(in);  
        this.in = in;  
    }  
  
    /**读取一个字符*/  
    public int read() throws IOException {  
        return in.read();  
    }  
  
    /**将字符读取到字符数组cbuf中*/  
    public int read(char cbuf[], int off, int len) throws IOException {  
        return in.read(cbuf, off, len);  
    }  
  
    /**跳过底层输入流中的n个字符*/  
    public long skip(long n) throws IOException {  
        return in.skip(n);  
    }  
  
    /**检测此流是否可以读取 */  
    public boolean ready() throws IOException {  
        return in.ready();  
    }  
  
    /**检测此流是否支持mark*/  
    public boolean markSupported() {  
        return in.markSupported();  
    }  
  
    /**标记此流*/  
    public void mark(int readAheadLimit) throws IOException {  
        in.mark(readAheadLimit);  
    }  
  
    /**重置最后一次mark的位置 */  
    public void reset() throws IOException {  
        in.reset();  
    }  
    /**关闭此流 */  
    public void close() throws IOException {  
        in.close();  
    }
}

总结

FilterReader是实现自定义过滤输入字符流的基类,基本上它仅仅只是简单覆盖了Reader中的所有方法。就我自己而言,我没发现这个类明显的用途。除了构造函数取一个Reader变量作为参数之外,我没看到FilterReader任何对Reader新增或者修改的地方。如果你选择继承FilterReader实现自定义的类,同样也可以直接继承自Reader从而避免额外的类层级结构。


版权声明:本文为JAVASCHOOL原创文章,未经本站允许不得转载。