• 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();
      }
    }
  • 相关阅读:
    C# 解析js方法,并调用js方法
    Net 面试题_代码
    最近小项目总结 2013.5.3
    程序集生成失败 引用的程序集“Interop.MSScriptControl”没有强名称
    Vs 使用 (快捷等)
    Ildasm.exe 反汇编程序使用
    MSSQL_1
    [异常] Asp.net 中异常处理
    Net 面试题_理论(总结网上流传的)
    反射
  • 原文地址:https://www.cnblogs.com/printN/p/6240724.html
Copyright © 2020-2023  润新知