java.lang.Object java.io.InputStream java.io.FilterInputStream
public class FilterInputStream
FilterInputStream
包含其他一些输入流,它将这些流用作其基本数据源,它可以直接传输数据或提供一些额外的功能。FilterInputStream
类本身只是简单地重写那些将所有请求传递给所包含输入流的 InputStream
的所有方法。FilterInputStream
的子类可进一步重写这些方法中的一些方法,并且还可以提供一些额外的方法和字段。
字段摘要 | |
---|---|
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 个字节的数据读入一个 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 |
字段详细信息 |
---|
protected volatile InputStream in
构造方法详细信息 |
---|
protected FilterInputStream(InputStream in)
in
分配给字段
this.in
,以便记住它供以后使用,通过这种方式创建一个
FilterInputStream
。
in
- 底层输入流,如果要在没有底层流的情况下创建此实例,则该参数为
null
。
方法详细信息 |
---|
public int read() throws IOException
0
到
255
范围内的
int
字节值。如果因为已经到达流末尾而没有字节可用,则返回
-1
。在输入数据可用、检测到流末尾或抛出异常之前,此方法将一直阻塞。
此方法只执行 in.read()
并返回结果。
InputStream
中的
read
-1
。
IOException
- 如果发生 I/O 错误。
in
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)
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
- 如果
b
为
null
。
IndexOutOfBoundsException
- 如果
off
为负、
len
为负,或者
len
大于
b.length - off
IOException
- 如果发生 I/O 错误。
in
public long skip(long n) throws IOException
n
个字节。出于各种原因,
skip
方法结束时跳过的字节数可能小于该数,也可能为
0
。导致这种情况的原因很多,跳过
n
个字节之前已到达文件末尾只是其中一种可能。返回跳过的实际字节数。如果
n
为负,则不跳过任何字节。
此类的 skip
方法创建一个 byte 数组,然后重复将字节读入其中,直到读够 n
个字节或已到达流末尾为止。建议子类提供此方法更为有效的实现。例如,可依赖搜索能力的实现。
此方法只执行 in.skip(n)
。
InputStream
中的
skip
n
- 要跳过的字节数。
IOException
- 如果流不支持搜索,或者发生其他 I/O 错误。
public int available() throws IOException
此方法返回 in
.available() 的结果。
InputStream
中的
available
IOException
- 如果发生 I/O 错误。
public void close() throws IOException
in.close()
。
Closeable
中的
close
InputStream
中的
close
IOException
- 如果发生 I/O 错误。
in
public void mark(int readlimit)
reset
方法的后续调用将此流重新定位在最后标记的位置上,以便后续读取操作重新读取相同的字节。
readlimit
参数告知此输入流在标记位置无效之前允许读取的字节数。
此方法只执行 in.mark(readlimit)
。
InputStream
中的
mark
public void reset() throws IOException
mark
方法时的位置。
此方法只执行 in.reset()
。
在需要提前读取一小部分数据以查看流中有什么的情况下,可以使用流的标记。通过调用通用解析器常常最容易做到这一点。如果流属于通过解析处理的类型,那么解析起来就很容易。如果流不属于那种类型,那么解析器应该在解析失败时抛出一个异常。如果这发生在 readlimit 个字节内,那么它允许外部代码重置流,并尝试另一种解析器。
InputStream
中的
reset
IOException
- 如果已经标记了该流,或者标记已经无效。
in
,
mark(int)
public boolean markSupported()
mark
和
reset
方法。此方法只执行
in.markSupported()
。
InputStream
中的
markSupported
mark
和
reset
方法,则返回
true
;否则返回
false
。
in
,
InputStream.mark(int)
,
InputStream.reset()