zoukankan      html  css  js  c++  java
  • Java中FilterInputStream和FilterOutputStream的用法

    FilterInputStream
    FilterInputStream 的作用是用来“封装其它的输入流,并为它们提供额外的功能”。它的常用的子类有BufferedInputStream和DataInputStream。
    BufferedInputStream的作用就是为“输入流提供缓冲功能,以及mark()和reset()功能”。
    DataInputStream 是用来装饰其它输入流,它“允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型”。应用程序可以使用DataOutputStream(数据输出流)写入由DataInputStream(数据输入流)读取的数据。

    FilterInputStream 源码(基于jdk1.7.40):

    package java.io;
    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 
    FilterOutputStream 的作用是用来“封装其它的输出流,并为它们提供额外的功能”。它主要包括BufferedOutputStream, DataOutputStream和PrintStream。
    (01) BufferedOutputStream的作用就是为“输出流提供缓冲功能”。
    (02) DataOutputStream 是用来装饰其它输出流,将DataOutputStream和DataInputStream输入流配合使用,“允许应用程序以与机器无关方式从底层输入流中读写基本 Java 数据类型”。
    (03) PrintStream 是用来装饰其它输出流。它能为其他输出流添加了功能,使它们能够方便地打印各种数据值表示形式。


    FilterOutputStream 源码(基于jdk1.7.40):

    package java.io;
     
    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();
      }
    }
  • 相关阅读:
    获取单选框的值
    HTML5本地存储详解
    设为首页和加入收藏
    用PhotoSwipe制作相册,手势可放大
    iOS 加载本地 HTML 文件 CSS 样式图片无效果
    PhotoSwipe简介
    Flexslider图片轮播、文字图片相结合滑动切换效果
    网页中插入视频的方法----腾讯、优酷为例
    webapp在Android中点击链接的时候会有淡蓝色的遮罩层
    C# 获取北京时间 (根据纪元时间(1970/1/1)转换为DateTime)
  • 原文地址:https://www.cnblogs.com/printN/p/6240724.html
Copyright © 2011-2022 走看看