资讯专栏INFORMATION COLUMN

JAVA IO源码学习系列一(FilterInpuStream 和FilterOutputStrea

Flink_China / 1739人阅读

摘要:源码内容过滤输出流的父类,继承自类似类本身只是简单地重写那些将所有请求传递给所包含输出流的的所有方法。的子类可进一步地重写这些方法中的一些方法,并且还可以提供一些额外的方法和字段。

介绍

根据名称就可以了解到过滤输入输出流是做什么用的,过滤,过滤是为了干嘛呢?前面我们介绍过了字节数组输入输出流,对于字节数组输入输出流,只提供了一些必要的读取, 写入标记等方法或功能,这些是最基础的,那么如果我们想将流根据指定的内容写入写出的时候该咋办呢?不能每次都自己来处理相应的方法,这样就比较麻烦了。所以就有了过滤的流;

FilterInpuStream and FilterOutputStream

过滤流是开发设计模式中装饰器模式最典型的实现。通过装饰过滤,实现增加不同的流操作的功能;

FilterInpuStream 源码内容

FilterInpuStream 是所有过滤类流的父类,继承自InputStream,在类中定义了InputStream属性内容,即装饰InputStream;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();
    }
}
FilterOutputStream源码内容

过滤输出流的父类,继承自OutputStream,类似FilterInputStream,FilterOutputStream 类本身只是简单地重写那些将所有请求传递给所包含输出流的 OutputStream 的所有方法。FilterOutputStream 的子类可进一步地重写这些方法中的一些方法,并且还可以提供一些额外的方法和字段。

public
class FilterOutputStream extends OutputStream {
      //要过滤的基础输出流。
    protected OutputStream out;

    public FilterOutputStream(OutputStream out) {
        this.out = out;
    }
    public void write(int b) throws IOException {
        out.write(b);
    }
    public void write(byte b[]) throws IOException {
        write(b, 0, b.length);
    }
    public void write(byte b[], int off, int len) throws IOException {
        if ((off | len | (b.length - (len + off)) | (off + len)) < 0)
            throw new IndexOutOfBoundsException();

        for (int i = 0 ; i < len ; i++) {
            write(b[off + i]);
        }
    }

    public void flush() throws IOException {
        out.flush();
    }

    public void close() throws IOException {
        try {
          flush();
        } catch (IOException ignored) {
        }
        out.close();
    }
总结

FilterInpuStream 和FilterOutputStream是过滤输入输出流的父类,具体需要过滤增加的附加功能由实现它们的子类去完成,具体内容后面慢慢介绍;

最后还是召唤神兽
/**
 *                                         ,s555SB@@&                          
 *                                      :9H####@@@@@Xi                        
 *                                     1@@@@@@@@@@@@@@8                       
 *                                   ,8@@@@@@@@@B@@@@@@8                      
 *                                  :B@@@@X3hi8Bs;B@@@@@Ah,                   
 *             ,8i                  r@@@B:     1S ,M@@@@@@#8;                 
 *            1AB35.i:               X@@8 .   SGhr ,A@@@@@@@@S                
 *            1@h31MX8                18Hhh3i .i3r ,A@@@@@@@@@5               
 *            ;@&i,58r5                 rGSS:     :B@@@@@@@@@@A               
 *             1#i  . 9i                 hX.  .: .5@@@@@@@@@@@1               
 *              sG1,  ,G53s.              9#Xi;hS5 3B@@@@@@@B1                
 *               .h8h.,A@@@MXSs,           #@H1:    3ssSSX@1                  
 *               s ,@@@@@@@@@@@@Xhi,       r#@@X1s9M8    .GA981               
 *               ,. rS8H#@@@@@@@@@@#HG51;.  .h31i;9@r    .8@@@@BS;i;          
 *                .19AXXXAB@@@@@@@@@@@@@@#MHXG893hrX#XGGXM@@@@@@@@@@MS        
 *                s@@MM@@@hsX#@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@&,      
 *              :GB@#3G@@Brs ,1GM@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@B,     
 *            .hM@@@#@@#MX 51  r;iSGAM@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@8     
 *          :3B@@@@@@@@@@@&9@h :Gs   .;sSXH@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@:    
 *      s&HA#@@@@@@@@@@@@@@M89A;.8S.       ,r3@@@@@@@@@@@@@@@@@@@@@@@@@@@r    
 *   ,13B@@@@@@@@@@@@@@@@@@@5 5B3 ;.         ;@@@@@@@@@@@@@@@@@@@@@@@@@@@i    
 *  5#@@#&@@@@@@@@@@@@@@@@@@9  .39:          ;@@@@@@@@@@@@@@@@@@@@@@@@@@@;    
 *  9@@@X:MM@@@@@@@@@@@@@@@#;    ;31.         H@@@@@@@@@@@@@@@@@@@@@@@@@@:    
 *   SH#@B9.rM@@@@@@@@@@@@@B       :.         3@@@@@@@@@@@@@@@@@@@@@@@@@@5    
 *     ,:.   9@@@@@@@@@@@#HB5                 .M@@@@@@@@@@@@@@@@@@@@@@@@@B    
 *           ,ssirhSM@&1;i19911i,.             s@@@@@@@@@@@@@@@@@@@@@@@@@@S   
 *              ,,,rHAri1h1rh&@#353Sh:          8@@@@@@@@@@@@@@@@@@@@@@@@@#:  
 *            .A3hH@#5S553&@@#h   i:i9S          #@@@@@@@@@@@@@@@@@@@@@@@@@A.
 *
 *
 *    又看源码,看你妹妹呀!
 */

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/70659.html

相关文章

  • 我的阿里之路+Java面经考点

    摘要:我的是忙碌的一年,从年初备战实习春招,年三十都在死磕源码,三月份经历了阿里五次面试,四月顺利收到实习。因为我心理很清楚,我的目标是阿里。所以在收到阿里之后的那晚,我重新规划了接下来的学习计划,将我的短期目标更新成拿下阿里转正。 我的2017是忙碌的一年,从年初备战实习春招,年三十都在死磕JDK源码,三月份经历了阿里五次面试,四月顺利收到实习offer。然后五月怀着忐忑的心情开始了蚂蚁金...

    姘搁『 评论0 收藏0
  • JAVA IO源码学习系列(InputStream)

    摘要:关闭此输入流并释放与该流关联的所有系统资源。在此输入流中标记当前的位置。将此流重新定位到最后一次对此输入流调用方法时的位置。 JAVA IO源码学习系列一(InputStream) ## 1.字节输入流源码InputStream介绍## InpuSteam是字节输入流操作的超类(抽象类),定义了基本的一些操作方法,流的操作大概四部分:(1)构造数据流(来源);(2)读取流;(3)读取流...

    mtunique 评论0 收藏0
  • JAVA IO源码学习系列(ByteArrayInputStream)

    摘要:简介字节数组输入流上一篇简单的介绍了一下字节输入流的超类,只提及了一下超类中定义的一些方法字节数组输入流是超类的一个具体的实现主要的操作实际上就是读取操作一个字节数组,类中定义了一个缓冲的字节数组,具体的操作通过定义一下标志位,操作次数等进 简介 ByteArrayInputStream 字节数组输入流 上一篇简单的介绍了一下字节输入流的超类,只提及了一下超类中定义的一些方法;字节数组...

    Keven 评论0 收藏0
  • JAVA IO源码学习系列(ByteArrayOutputStream)

    介绍 1. 输出流:ByteArrayOutputStream 上一篇简单介绍了输出流的超类OutputStream,也大概的讲述了输出流的作用,本篇就介绍一下,输出流的一种实现,字节数组输出流,该输出流是为了处理字节的基础流,本质上就是写入数据到类中的缓冲字节数组中; 2. ByteArrayOutputStream 源代码介绍 (1)属性内容:属性内容相较输入流的会有存放数据的缓冲区,也就是字...

    oujie 评论0 收藏0
  • JAVA IO源码学习系列(OutputStream)

    摘要:将指定数组中从偏移量开始的个字节写入此输出流。刷新此输出流并强制写出所有缓冲的输出字节关闭此输出流并释放与此流有关的所有系统资源。内容不多,召唤神兽 介绍 1. 输出流:OutputStream 之前的文章中介绍过了输入流的超类InputStream,这篇文章也简单的介绍一下与输入流相对的输出流;输入流我们之前说过,是将磁盘,文件,或者网络中的数据读取出来,(比如字节数组输入流将数据放...

    objc94 评论0 收藏0

发表评论

0条评论

Flink_China

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<