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();
      }
    }
  • 相关阅读:
    从汇编看c语言函数调用
    安家之由
    算法设计新思路
    AcceptsReturn
    silverlight 导出DataGrid 数据到Excel
    siliverlight双击事件
    如何:以编程方式调用按钮的 Click 事件 (Visual C#)
    左连接出错
    C# 根据当前时间获取,本周,本月,本季度等时间段
    验证用户登陆
  • 原文地址:https://www.cnblogs.com/printN/p/6240724.html
Copyright © 2011-2022 走看看