跟我学IO(FilterInputStream类)

FilterInputStream类包含其他一些输入流,它将这些流用作其基本数据源,它可以直接传输数据或提供一些额外的功能。该类本身只是简单地重写那些将所有请求传递给所包含输入流的InputStream 的所有方法。FilterInputStream的子类可进一步重写这些方法中的一些方法,并且还可以提供一些额外的方法和字段。

FilterInputStream类包含其他一些输入流,它将这些流用作其基本数据源,它可以直接传输数据或提供一些额外的功能。该类本身只是简单地重写那些将所有请求传递给所包含输入流的InputStream 的所有方法。FilterInputStream的子类可进一步重写这些方法中的一些方法,并且还可以提供一些额外的方法和字段。

下面我们直接看看FilterInputStream的源码,就明白该类的实现原理。源码如下:

// 实现了InputStream
public class FilterInputStream extends InputStream {
    // 输入流对象
    protected volatile InputStream in;

    protected FilterInputStream(InputStream in) {
        this.in = in;
    }

    public int read() throws IOException {
        return in.read();
    }

    public int read(byte b[]) throws IOException {
        return read(b, 0, b.length);
    }

    public int read(byte b[], int off, int len) throws IOException {
        return in.read(b, off, len);
    }

    public long skip(long n) throws IOException {
        return in.skip(n);
    }

    public int available() throws IOException {
        return in.available();
    }

    public void close() throws IOException {
        in.close();
    }

    public synchronized void mark(int readlimit) {
        in.mark(readlimit);
    }

    public synchronized void reset() throws IOException {
        in.reset();
    }

    public boolean markSupported() {
        return in.markSupported();
    }
}

从上面可以看出所有提供的方法,如:reset、mark、close、available等方法的实现其实就是调用了FilterInputStream内部InputStream实例的相应方法。这样就可以在原有方法的基础上面提供更强大的功能。如缓存等等。

同时,从代码结构可以看出,这里使用了java设计模式中的装饰模式。装饰(Decorator)模式又名为包装(Wrapper)模式。装饰模式以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案。

InputStream装饰模式结构图

1、InputStream扮演抽象角色,抽象了所有输入流的操作。

2、FileInputStream实现了InputStream接口,提供了最基本的操作。

3、FilterInputStream实现了InputStream接口,且内部拥有一个FileInputStream类的实例,其中提供了与FileInputStream类一样的接口,每个接口都是使用FileInputStream实例的对应方法进行处理。

4、BufferedInputStream继承了FilterInputStream类,然后对其中需要加强的内进行重写。如:read方法

关于java设计模式相关的信息,请查看模式栏目。

游手好闲地学习,并不比学习游手好闲好。 —— 约翰·贝勒斯
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
其他应用
公众号