JavaTM Platform
Standard Ed. 6

java.io
类 FilterInputStream

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

public class FilterInputStream
extends InputStream

FilterInputStream 包含其他一些输入流,它将这些流用作其基本数据源,它可以直接传输数据或提供一些额外的功能。FilterInputStream 类本身只是简单地重写那些将所有请求传递给所包含输入流的 InputStream 的所有方法。FilterInputStream 的子类可进一步重写这些方法中的一些方法,并且还可以提供一些额外的方法和字段。

从以下版本开始:
JDK1.0

字段摘要
protected  InputStream in
          要过滤的输入流。
 
构造方法摘要
protected FilterInputStream(InputStream in)
          将参数 in 分配给字段 this.in,以便记住它供以后使用,通过这种方式创建一个 FilterInputStream
 
方法摘要
 int available()
          返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取(或跳过)的估计剩余字节数。
 void close()
          关闭此输入流并释放与此流关联的所有系统资源。
 void mark(int readlimit)
          在输入流中的当前位置上作标记。
 boolean markSupported()
          测试此输入流是否支持 markreset 方法。
 int read()
          从此输入流中读取下一个数据字节。
 int read(byte[] b)
          从此输入流中将 byte.length 个字节的数据读入一个 byte 数组中。
 int read(byte[] b, int off, int len)
          从此输入流中将 len 个字节的数据读入一个 byte 数组中。
 void reset()
          将此流重新定位到对此输入流最后调用 mark 方法时的位置。
 long skip(long n)
          跳过和丢弃此输入流中数据的 n 个字节。
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

字段详细信息

in

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

构造方法详细信息

FilterInputStream

protected FilterInputStream(InputStream in)
将参数 in 分配给字段 this.in,以便记住它供以后使用,通过这种方式创建一个 FilterInputStream

参数:
in - 底层输入流,如果要在没有底层流的情况下创建此实例,则该参数为 null
方法详细信息

read

public int read()
         throws IOException
从此输入流中读取下一个数据字节。返回一个 0255 范围内的 int 字节值。如果因为已经到达流末尾而没有字节可用,则返回 -1。在输入数据可用、检测到流末尾或抛出异常之前,此方法将一直阻塞。

此方法只执行 in.read() 并返回结果。

指定者:
InputStream 中的 read
返回:
下一个数据字节;如果已到达流末尾,则返回 -1
抛出:
IOException - 如果发生 I/O 错误。
另请参见:
in

read

public int read(byte[] b)
         throws IOException
从此输入流中将 byte.length 个字节的数据读入一个 byte 数组中。在某些输入可用之前,此方法将阻塞。

此方法只执行 read(b, 0, b.length) 调用并返回结果。注意到它 执行 in.read(b) 很重要;FilterInputStream 的某些子类依赖于实际使用的实现策略。

覆盖:
InputStream 中的 read
参数:
b - 存储读取数据的缓冲区。
返回:
读入缓冲区的字节总数,如果因为已经到达流末尾而没有更多的数据,则返回 -1
抛出:
IOException - 如果发生 I/O 错误。
另请参见:
read(byte[], int, int)

read

public int read(byte[] b,
                int off,
                int len)
         throws IOException
从此输入流中将 len 个字节的数据读入一个 byte 数组中。如果 len 不为 0,则在输入可用前,此方法将阻塞;否则,不读取任何字节并且返回 0

此方法只执行 in.read(b, off, len) 并返回结果。

覆盖:
InputStream 中的 read
参数:
b - 存储读取数据的缓冲区。
off - 目标数组 b 中的起始偏移量。
len - 读取的最大字节数。
返回:
读入缓冲区的字节总数,如果因为已经到达流末尾而没有更多的数据,则返回 -1
抛出:
NullPointerException - 如果 bnull
IndexOutOfBoundsException - 如果 off 为负、len 为负,或者 len 大于 b.length - off
IOException - 如果发生 I/O 错误。
另请参见:
in

skip

public long skip(long n)
          throws IOException
跳过和丢弃此输入流中数据的 n 个字节。出于各种原因,skip 方法结束时跳过的字节数可能小于该数,也可能为 0。导致这种情况的原因很多,跳过 n 个字节之前已到达文件末尾只是其中一种可能。返回跳过的实际字节数。如果 n 为负,则不跳过任何字节。

此类的 skip 方法创建一个 byte 数组,然后重复将字节读入其中,直到读够 n 个字节或已到达流末尾为止。建议子类提供此方法更为有效的实现。例如,可依赖搜索能力的实现。

此方法只执行 in.skip(n)

覆盖:
InputStream 中的 skip
参数:
n - 要跳过的字节数。
返回:
跳过的实际字节数。
抛出:
IOException - 如果流不支持搜索,或者发生其他 I/O 错误。

available

public int available()
              throws IOException
返回下一次对此输入流调用的方法可以不受阻塞地从此输入流读取(或跳过)的估计剩余字节数。下一个调用者可能是同一个线程,也可能是另一个线程。一次读取或跳过此数量个字节不会发生阻塞,但读取或跳过的字节可能小于该数。

此方法返回 in.available() 的结果。

覆盖:
InputStream 中的 available
返回:
可以不受阻塞地从此输入流中读取(或跳过)的估计字节数。
抛出:
IOException - 如果发生 I/O 错误。

close

public void close()
           throws IOException
关闭此输入流并释放与此流关联的所有系统资源。此方法只执行 in.close()

指定者:
接口 Closeable 中的 close
覆盖:
InputStream 中的 close
抛出:
IOException - 如果发生 I/O 错误。
另请参见:
in

mark

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

readlimit 参数告知此输入流在标记位置无效之前允许读取的字节数。

此方法只执行 in.mark(readlimit)

覆盖:
InputStream 中的 mark
参数:
readlimit - 在标记位置变得无效前可以读取字节的最大限制。
另请参见:
in, reset()

reset

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

此方法只执行 in.reset()

在需要提前读取一小部分数据以查看流中有什么的情况下,可以使用流的标记。通过调用通用解析器常常最容易做到这一点。如果流属于通过解析处理的类型,那么解析起来就很容易。如果流不属于那种类型,那么解析器应该在解析失败时抛出一个异常。如果这发生在 readlimit 个字节内,那么它允许外部代码重置流,并尝试另一种解析器。

覆盖:
InputStream 中的 reset
抛出:
IOException - 如果已经标记了该流,或者标记已经无效。
另请参见:
in, mark(int)

markSupported

public boolean markSupported()
测试此输入流是否支持 markreset 方法。此方法只执行 in.markSupported()

覆盖:
InputStream 中的 markSupported
返回:
如果此流类型支持 markreset 方法,则返回 true;否则返回 false
另请参见:
in, InputStream.mark(int), InputStream.reset()

JavaTM Platform
Standard Ed. 6

提交错误或意见
有关更多的 API 参考资料和开发人员文档,请参阅 Java SE 开发人员文档。该文档包含更详细的、面向开发人员的描述,以及总体概述、术语定义、使用技巧和工作代码示例。

版权所有 2007 Sun Microsystems, Inc. 保留所有权利。 请遵守许可证条款。另请参阅文档重新分发政策