Module java.base
Package java.io

Class FilterInputStream

java.lang.Object
java.io.InputStream
java.io.FilterInputStream
所有已实现的接口:
Closeable, AutoCloseable
直接已知的子类:
BufferedInputStream, CheckedInputStream, CipherInputStream, DataInputStream, DeflaterInputStream, DigestInputStream, InflaterInputStream, LineNumberInputStream, ProgressMonitorInputStream, PushbackInputStream

public class FilterInputStream extends InputStream
FilterInputStream 包装某些其他输入流,它将其用作基本数据源,可能在传输数据的同时转换数据或提供附加功能。类 FilterInputStream 本身只是重写了 InputStream 的一些方法,这些方法的版本将所有请求传递给包装的输入流。 FilterInputStream 的子类当然可以重写 FilterInputStream 声明或继承的任何方法,并且还可以提供额外的字段和方法。
自:
1.0
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected InputStream
    in
    要过滤的输入流。
  • Constructor Summary

    Constructors
    Modifier
    Constructor
    Description
    protected
    通过将参数 in 分配给字段 this.in 来创建一个 FilterInputStream,以便以后使用时记住它。
  • Method Summary

    Modifier and Type
    Method
    Description
    int
    返回可以从此输入流读取(或跳过)的字节数的估计值,而不会被下一个调用此输入流方法的调用者阻塞。
    void
    close()
    关闭此输入流并释放与流关联的任何系统资源。
    void
    mark(int readlimit)
    标记此输入流中的当前位置。
    boolean
    测试此输入流是否支持 markreset 方法。
    int
    read()
    从输入流中读取下一个字节的数据。
    int
    read(byte[] b)
    从此输入流中读取最多 b.length 字节的数据到字节数组中。
    int
    read(byte[] b, int off, int len)
    从此输入流中读取最多 len 字节的数据到字节数组中。
    void
    reset()
    将此流重新定位到上次在此输入流上调用 mark 方法时的位置。
    long
    skip(long n)
    跳过并丢弃输入流中的 n 字节数据。

    Methods declared in class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • in

      protected volatile InputStream in
      要过滤的输入流。
  • Constructor Details

    • FilterInputStream

      protected FilterInputStream(InputStream in)
      通过将参数 in 分配给字段 this.in 来创建一个 FilterInputStream,以便以后使用时记住它。
      参数:
      in - 基础输入流,如果要创建此实例而没有基础流,则为 null
  • Method Details

    • read

      public int read() throws IOException
      从输入流中读取下一个字节的数据。将值字节作为 int 返回,范围为 0255。如果没有字节可用,因为已到达流的末尾,则返回值为 -1。此方法将阻塞,直到有输入数据可用,检测到流的末尾,或抛出异常。
      指定者:
      read 在类 InputStream
      实现要求:
      此方法只是执行 in.read() 并返回结果。
      返回:
      下一个数据字节,如果已到达流的末尾,则为 -1
      抛出:
      IOException - 如果发生 I/O 错误。
      参见:
    • read

      public int read(byte[] b) throws IOException
      从此输入流中读取最多 b.length 字节的数据到字节数组中。此方法将阻塞,直到有输入可用。
      覆盖:
      read 在类 InputStream
      实现要求:
      此方法只是执行调用 read(b, 0, b.length) 并返回结果。重要的是它实际上不执行 in.read(b);某些 FilterInputStream 的子类依赖于实际使用的实现策略。
      参数:
      b - 数据读入的缓冲区。
      返回:
      读入缓冲区的总字节数,如果没有更多数据,因为已到达流的末尾,则为 -1
      抛出:
      IOException - 如果发生 I/O 错误。
      参见:
    • read

      public int read(byte[] b, int off, int len) throws IOException
      从此输入流中读取最多 len 字节的数据到字节数组中。如果 len 不为零,则该方法将阻塞,直到有输入可用;否则,不会读取任何字节,返回 0
      覆盖:
      read 在类 InputStream
      实现要求:
      此方法只是执行 in.read(b, off, len) 并返回结果。
      参数:
      b - 数据读入的缓冲区。
      off - 写入数据的数组 b 中的起始偏移量。
      len - 要读取的最大字节数。
      返回:
      读入缓冲区的总字节数,如果没有更多数据,因为已到达流的末尾,则为 -1
      抛出:
      NullPointerException - 如果 bnull
      IndexOutOfBoundsException - 如果 off 为负数,len 为负数,或 len 大于 b.length - off
      IOException - 如果发生 I/O 错误。
      参见:
    • skip

      public long skip(long n) throws IOException
      跳过并丢弃输入流中的 n 字节数据。由于各种原因,skip 方法最终可能会跳过一些较小数量的字节,可能为 0。返回实际跳过的字节数。
      覆盖:
      skip 在类 InputStream
      实现要求:
      此方法只是执行 in.skip(n) 并返回结果。
      参数:
      n - 要跳过的字节数。
      返回:
      实际跳过的字节数。
      抛出:
      IOException - 如果 in.skip(n) 抛出 IOException。
      参见:
    • available

      public int available() throws IOException
      返回可以从此输入流读取(或跳过)的字节数的估计值,而不会被下一个调用此输入流方法的调用者阻塞。下一个调用者可能是同一线程或另一个线程。读取或跳过这么多字节的单个操作不会阻塞,但可能读取或跳过较少的字节。
      覆盖:
      available 在类 InputStream
      实现要求:
      此方法返回 in.available() 的结果。
      返回:
      可以从此输入流读取(或跳过)的字节数的估计值,而不会被阻塞。
      抛出:
      IOException - 如果发生 I/O 错误。
    • close

      public void close() throws IOException
      关闭此输入流并释放与流关联的任何系统资源。
      指定者:
      close 在接口 AutoCloseable
      指定者:
      close 在接口 Closeable
      覆盖:
      close 在类 InputStream
      实现要求:
      此方法只是执行 in.close()
      抛出:
      IOException - 如果发生 I/O 错误。
      参见:
    • mark

      public void mark(int readlimit)
      标记此输入流中的当前位置。随后调用 reset 方法将此流重新定位到上次标记的位置,以便后续读取重新读取相同的字节。

      readlimit 参数告诉此输入流在标记位置失效之前允许读取多少字节。

      覆盖:
      mark 在类 InputStream
      实现要求:
      此方法只是执行in.mark(readlimit)
      参数:
      readlimit - 在标记位置变为无效之前可以读取的字节数的最大限制。
      参见:
    • reset

      public void reset() throws IOException
      将此流重新定位到上次在此输入流上调用mark方法时的位置。

      流标记旨在用于需要向前读取一点以查看流中内容的情况。通常,最容易通过调用一些通用解析器来完成此操作。如果流是解析器处理的类型,则它会快乐地继续前进。如果流不是该类型,则解析器在失败时应抛出异常。如果这发生在readlimit字节内,它允许外部代码重置流并尝试另一个解析器。

      覆盖:
      reset 在类 InputStream
      实现要求:
      此方法只是执行in.reset()
      抛出:
      IOException - 如果此流未被标记或者标记已失效。
      参见:
    • markSupported

      public boolean markSupported()
      测试此输入流是否支持markreset方法。
      覆盖:
      markSupported 在类 InputStream
      实现要求:
      此方法只是执行in.markSupported()
      返回:
      如果此流类型支持markreset方法,则返回true;否则返回false
      参见: