- java.lang.Object
-
- java.io.InputStream
-
- java.io.FilterInputStream
-
- All Implemented Interfaces:
-
Closeable
,AutoCloseable
- 已知直接子类:
-
BufferedInputStream
,CheckedInputStream
,CipherInputStream
,DataInputStream
,DeflaterInputStream
,DigestInputStream
,InflaterInputStream
,LineNumberInputStream
,ProgressMonitorInputStream
,PushbackInputStream
public class FilterInputStream extends InputStream
AFilterInputStream
包含一些其他输入流,它使用它作为其基本的数据源,可能沿着该方向转换数据或提供附加功能。 类FilterInputStream
本身只是简单地重写的所有方法InputStream
与传递给所包含输入流的所有请求的版本。FilterInputStream
子类可以进一步覆盖这些方法中的一些,并且还可以提供附加的方法和领域。- 从以下版本开始:
- 1.0
-
-
Field Summary
Fields Modifier and Type Field 描述 protected InputStream
in
要过滤的输入流。
-
构造方法摘要
构造方法 Modifier Constructor 描述 protected
FilterInputStream(InputStream in)
创建FilterInputStream
通过分配参数in
到外地this.in
,以便记住它供以后使用。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 int
available()
返回从该输入流中可以读取(或跳过)的字节数的估计,而不会被下一个调用者阻塞该输入流的方法。void
close()
关闭此输入流并释放与流相关联的任何系统资源。void
mark(int readlimit)
标记此输入流中的当前位置。boolean
markSupported()
测试此输入流是否支持mark
和reset
方法。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 inherited from class java.io.InputStream
readAllBytes, readNBytes, transferTo
-
-
-
-
字段详细信息
-
in
protected volatile InputStream in
要过滤的输入流。
-
-
构造方法详细信息
-
FilterInputStream
protected FilterInputStream(InputStream in)
创建FilterInputStream
通过分配参数in
到外地this.in
,以便记住它供以后使用。- 参数
-
in
- 底层输入流,或null
如果此实例要创建没有底层流。
-
-
方法详细信息
-
read
public int read() throws IOException
从该输入流读取下一个数据字节。 值字节被返回作为int
范围0
到255
。 如果没有字节可用,因为已经到达流的末尾,则返回值-1
。 该方法阻塞直到输入数据可用,检测到流的结尾,或抛出异常。此方法只需执行
in.read()
并返回结果。- Specified by:
-
read
在InputStream
- 结果
-
数据的下一个字节,如果达到流的末尾,
-1
。 - 异常
-
IOException
- 如果发生I / O错误。 - 另请参见:
-
in
-
read
public int read(byte[] b) throws IOException
从该输入流读取最多b.length
个字节的数据到字节数组。 此方法将阻塞,直到某些输入可用。该方法只需执行
read(b, 0, b.length)
并返回结果。 重要的是不要做in.read(b)
;FilterInputStream
某些子类依赖于实际使用的实现策略。- 重写:
-
read
在InputStream
- 参数
-
b
- 读取数据的缓冲区。 - 结果
-
读取到缓冲区的总字节数,如果没有更多的数据,因为已经到达流的末尾,那么
-1
。 - 异常
-
IOException
- 如果发生I / O错误。 - 另请参见:
-
read(byte[], int, int)
-
read
public int read(byte[] b, int off, int len) throws IOException
从这个输入流读取最多len
字节的数据到字节数组。 如果len
不为零,该方法将阻塞,直到有些输入可用; 否则,不会读取字节,并返回0
。该方法只需执行
in.read(b, off, len)
并返回结果。- 重写:
-
read
在InputStream
- 参数
-
b
- 读取数据的缓冲区。 -
off
- 目标数组b
的起始偏移量 -
len
- 读取的最大字节数。 - 结果
-
读入缓冲区的总字节数,如果没有更多的数据,因为已经到达流的末尾,
-1
。 - 异常
-
NullPointerException
- 如果b
是null
。 -
IndexOutOfBoundsException
- 如果off
为负,len
为负数,或len
大于b.length - off
-
IOException
- 如果发生I / O错误。 - 另请参见:
-
in
-
skip
public long skip(long n) throws IOException
跳过并从输入流中丢弃n
字节的数据。 由于各种原因,skip
方法可能会跳过一些较小数量的字节,可能是0
。 返回实际跳过的字节数。这种方法只需执行
in.skip(n)
。- 重写:
-
skip
在类InputStream
- 参数
-
n
- 要跳过的字节数。 - 结果
- 实际跳过的字节数。
- 异常
-
IOException
- 如果in.skip(n)
抛出一个IOException。
-
available
public int available() throws IOException
返回从该输入流中可以读取(或跳过)的字节数的估计,而不会被下一个调用者阻塞该输入流的方法。 下一个调用者可能是同一个线程或另一个线程。 这个多个字节的单个读取或跳过将不会被阻塞,但可以读取或跳过较少的字节。此方法返回的结果为
in
.available()。- 重写:
-
available
在InputStream
- 结果
- 可以从该输入流中读取(或跳过)不受阻塞的字节数的估计。
- 异常
-
IOException
- 如果发生I / O错误。
-
close
public void close() throws IOException
关闭此输入流并释放与流相关联的任何系统资源。 该方法简单地执行in.close()
。- Specified by:
-
close
在接口AutoCloseable
- Specified by:
-
close
在接口Closeable
- 重写:
-
close
在类InputStream
- 异常
-
IOException
- 如果发生I / O错误。 - 另请参见:
-
in
-
mark
public void mark(int readlimit)
标记此输入流中的当前位置。 随后调用reset
方法将该流重新定位在最后一个标记的位置,以便后续读取重新读取相同的字节。readlimit
参数告诉这个输入流,允许在标记位置无效之前读取许多字节。该方法简单地执行
in.mark(readlimit)
。- 重写:
-
mark
在InputStream
- 参数
-
readlimit
- 在标记位置无效之前可以读取的最大字节数限制。 - 另请参见:
-
in
,reset()
-
reset
public void reset() throws IOException
将此流重新定位到最后在此输入流上调用mark
方法时的位置。该方法简单地执行
in.reset()
。流标记旨在用于您需要先阅读一下以查看流中的内容的情况。 通常这通过调用一些一般的解析器来最容易地完成。 如果流是由解析器处理的类型,那么它就可以快乐地拥抱。 如果流不是该类型,解析器应该在失败时抛出异常。 如果在readlimit字节中发生这种情况,它允许外部代码重置流并尝试另一个解析器。
- 重写:
-
reset
在InputStream
- 异常
-
IOException
- 如果流未被标记或标记已被无效。 - 另请参见:
-
in
,mark(int)
-
markSupported
public boolean markSupported()
测试此输入流是否支持mark
和reset
方法。 这种方法只需执行in.markSupported()
。- 重写:
-
markSupported
在InputStream
- 结果
-
true
如果这种流类型支持mark
和reset
方法; 否则为false
。 - 另请参见:
-
in
,InputStream.mark(int)
,InputStream.reset()
-
-