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();
      }
    }
  • 相关阅读:
    [LeetCode] Minimum Depth of Binary Tree
    [LeetCode] Symmetric Tree
    [Leetcode] Same Tree
    [LeetCode] Binary Tree Preorder/Inorder/Postorder Traversal
    [LeetCode] Copy List with Random Pointe
    [LeetCode] Largest Rectangle in Histogram
    [LeetCode] Longest Valid Parentheses
    SQL Server 2005 数据库复制(转载)
    Nginx 大文件上传解决方案(500M以上)
    百度WebUploader 大文件上传解决方案(500M以上)
  • 原文地址:https://www.cnblogs.com/printN/p/6240724.html
Copyright © 2011-2022 走看看