FilterInputStream
java.lang.Object
|—java.io.InputStream
|—|—java.io.FilterInputStream
public class FilterInputStream
extends InputStream
FilterInputStream 包含一些其他输入流,它用作其基本数据源,可能沿途转换数据或提供附加功能。 FilterInputStream 类本身只是简单地覆盖 InputStream 的所有方法,其版本将所有请求传递给包含的输入流。 FilterInputStream 的子类可能会进一步覆盖其中一些方法,并且还可能提供额外的方法和字段。
Since:
JDK1.0
字段摘要
修饰符和类型 | 字段 | 描述 |
---|---|---|
protected InputStream | in | 要过滤的输入流。 |
构造函数摘要
修饰符 | 构造函数 | 描述 |
---|---|---|
protected | FilterInputStream(InputStream in) | 通过将参数 in 分配给字段 this.in 来创建一个 FilterInputStream,以便记住它以供以后使用。 |
方法总结
修饰符和类型 | 方法 | 描述 |
---|---|---|
int | available() | 返回可以从此输入流中读取(或跳过)的字节数的估计值,而不会被此输入流的方法的下一个调用者阻塞。 |
void | close() | 关闭此输入流并释放与该流关联的所有系统资源。 |
void | mark(int readlimit) | 标记此输入流中的当前位置。 |
boolean | markSupported() | 测试此输入流是否支持 mark 和 reset 方法。 |
int | read() | 从此输入流中读取数据的下一个字节。 |
int | read(byte[] b) | 从此输入流中读取最多 byte.length 个字节的数据到一个字节数组中。 |
int | read(byte[] b, int off, int len) | 从此输入流中读取最多 len 个字节的数据到一个字节数组中。 |
void | reset() | 将此流重新定位到最后一次在此输入流上调用标记方法时的位置。 |
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
从此输入流中读取数据的下一个字节。 值字节作为 int 返回,范围为 0 到 255。如果由于到达流的末尾而没有可用的字节,则返回值 -1。 此方法会一直阻塞,直到输入数据可用、检测到流结束或引发异常。
这个方法简单地执行 in.read() 并返回结果。
指定者:
读入类 InputStream
返回:
数据的下一个字节,如果到达流的末尾,则为 -1。
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果发生 I/O 错误。 |
read
public int read(byte[] b) throws IOException
从此输入流中读取最多 byte.length 个字节的数据到一个字节数组中。 此方法会阻塞,直到某些输入可用。
该方法只执行调用 read(b, 0, b.length) 并返回结果。 重要的是它不改为 in.read(b) ; FilterInputStream 的某些子类取决于实际使用的实现策略。
覆盖:
读入类 InputStream
参数:
参数名称 | 参数描述 |
---|---|
b | 读取数据的缓冲区。 |
返回:
读入缓冲区的总字节数,如果由于到达流的末尾而没有更多数据,则为 -1。
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果发生 I/O 错误。 |
read
public int read(byte[] b, int off, int len) throws IOException
从此输入流中读取最多 len 个字节的数据到一个字节数组中。 如果 len 不为零,则该方法会阻塞,直到某些输入可用; 否则,不读取任何字节并返回 0。
该方法简单地执行 in.read(b, off, len) 并返回结果。
覆盖:
读入类 InputStream
参数:
参数名称 | 参数描述 |
---|---|
b | 读取数据的缓冲区。 |
off | 目标数组 b 中的起始偏移量 |
len | 读取的最大字节数。 |
返回:
读入缓冲区的总字节数,如果由于到达流的末尾而没有更多数据,则为 -1。
Throws:
Throw名称 | Throw描述 |
---|---|
NullPointerException | 如果 b 为空。 |
IndexOutOfBoundsException | 如果 off 为负数,len 为负数,或者 len 大于 b.length – off |
IOException | 如果发生 I/O 错误。 |
skip
public long skip(long n) throws IOException
跳过并丢弃输入流中的 n 字节数据。 由于各种原因,skip 方法最终可能会跳过一些较小的字节数,可能为 0。返回实际跳过的字节数。
这个方法简单地执行 in.skip(n)。
覆盖:
在 InputStream 类中跳过
参数:
参数名称 | 参数描述 |
---|---|
n | 要跳过的字节数。 |
返回:
跳过的实际字节数。
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果流不支持查找,或者发生其他一些 I/O 错误。 |
available
public int available() throws IOException
返回可以从此输入流中读取(或跳过)的字节数的估计值,而不会被此输入流的方法的下一个调用者阻塞。 下一个调用者可能是同一个线程或另一个线程。 单次读取或跳过这么多字节不会阻塞,但可能会读取或跳过更少的字节。
此方法返回 in.available() 的结果。
覆盖:
在类 InputStream 中可用
返回:
估计可以从该输入流中读取(或跳过)而不阻塞的字节数。
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果发生 I/O 错误。 |
close
public void close() throws IOException
关闭此输入流并释放与该流关联的所有系统资源。 这个方法只是简单地执行 in.close()。
指定者:
在接口 AutoCloseable 中关闭
指定者:
在接口Closeable中关闭
覆盖:
在类 InputStream 中关闭
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果发生 I/O 错误。 |
mark
public void mark(int readlimit)
标记此输入流中的当前位置。 对 reset 方法的后续调用将此流重新定位到最后标记的位置,以便后续读取重新读取相同的字节。
readlimit 参数告诉此输入流允许在标记位置无效之前读取那么多字节。
这个方法简单地执行 in.mark(readlimit)。
覆盖:
在 InputStream 类中标记
参数:
参数名称 | 参数描述 |
---|---|
readlimit | 在标记位置无效之前可以读取的最大字节数。 |
reset
public void reset() throws IOException
将此流重新定位到最后一次在此输入流上调用标记方法时的位置。
这个方法只是简单地执行 in.reset()。
流标记旨在用于需要提前阅读以查看流中内容的情况。 通常这最容易通过调用一些通用解析器来完成。 如果流是由解析处理的类型,它就会愉快地前进。 如果流不是那种类型,解析器应该在失败时抛出一个异常。 如果这发生在 readlimit 字节内,它允许外部代码重置流并尝试另一个解析器。
覆盖:
在类 InputStream 中重置
Throws:
Throw名称 | Throw描述 |
---|---|
IOException | 如果流尚未被标记或标记已失效。 |
markSupported
public boolean markSupported()
测试此输入流是否支持 mark 和 reset 方法。 这个方法只是简单地执行 in.markSupported()。
覆盖:
类 InputStream 中的 markSupported
返回:
如果此流类型支持标记和重置方法,则为 true; 否则为 false。