public abstract class InputStream
extends Object
implements Closeable
java.lang.Object | |
↳ | java.io.InputStream |
Known Direct Subclasses |
这个抽象类是代表输入字节流的所有类的超类。
需要定义 InputStream
的子类的应用程序必须始终提供返回下一个输入字节的方法。
也可以看看:
Public constructors |
|
---|---|
InputStream() |
Public methods |
|
---|---|
int |
available() 返回可从此输入流读取(或跳过)的字节数的估计值,而不会因为此输入流的下一次调用方法而被阻止。 |
void |
close() 关闭此输入流并释放与该流关联的所有系统资源。 |
void |
mark(int readlimit) 标记此输入流中的当前位置。 |
boolean |
markSupported() 测试此输入流是否支持 |
abstract int |
read() 从输入流中读取下一个字节的数据。 |
int |
read(byte[] b, int off, int len) 最多可将 |
int |
read(byte[] b) 从输入流中读取一些字节数并将它们存储到缓冲区阵列 |
void |
reset() 将此流重新定位到上次在此输入流上调用 |
long |
skip(long n) 跳过并丢弃来自此输入流的 |
Inherited methods |
|
---|---|
From class java.lang.Object
|
|
From interface java.io.Closeable
|
|
From interface java.lang.AutoCloseable
|
int available ()
返回可从此输入流读取(或跳过)的字节数的估计值,而不会因为此输入流的下一次调用方法而被阻止。 下一次调用可能是同一个线程或另一个线程。 单个读取或跳过这么多字节不会被阻塞,但可以读取或跳过更少的字节。
请注意,尽管InputStream
一些实现将返回流中的总字节数,但许多不会。 使用此方法的返回值分配旨在保存此流中所有数据的缓冲区永远是不正确的。
子类此方法的实现可以选择抛出 IOException
如果输入流已通过调用关闭 close()
方法。
该 available
类方法 InputStream
总是返回 0
。
这个方法应该被子类覆盖。
Returns | |
---|---|
int |
an estimate of the number of bytes that can be read (or skipped over) from this input stream without blocking or 0 when it reaches the end of the input stream. |
Throws | |
---|---|
IOException |
if an I/O error occurs. |
void close ()
关闭此输入流并释放与该流关联的所有系统资源。
close
方法 InputStream
什么都不做。
Throws | |
---|---|
IOException |
if an I/O error occurs. |
void mark (int readlimit)
标记此输入流中的当前位置。 随后调用reset
方法将此流重新定位到最后标记的位置,以便后续读取重新读取相同的字节。
readlimit
参数告诉这个输入流允许在标记位置失效之前读取很多字节。
mark
的总体合同是,如果方法markSupported
返回true
,则流会以某种方式记住在调用mark
之后读取的所有字节,并随时准备在调用方法reset
时再次提供这些相同的字节。 但是,如果在reset
之前从流中读取了readlimit
个字节以上的数据流,则根本不需要记录任何数据。
标记封闭的流不应该对流有任何影响。
该 mark
的方法 InputStream
什么都不做。
Parameters | |
---|---|
readlimit |
int : the maximum limit of bytes that can be read before the mark position becomes invalid. |
也可以看看:
boolean markSupported ()
测试此输入流是否支持mark
和reset
方法。 是否支持mark
和reset
是特定输入流实例的不变特性。 该markSupported
方法InputStream
回报false
。
Returns | |
---|---|
boolean |
true if this stream instance supports the mark and reset methods; false otherwise. |
int read ()
从输入流中读取下一个字节的数据。 值字节被返回作为int
范围0
到255
。 如果由于已到达流末尾而没有字节可用,则返回值-1
。 此方法阻塞直到输入数据可用,流的末尾被检测到,或抛出异常。
子类必须提供此方法的实现。
Returns | |
---|---|
int |
the next byte of data, or -1 if the end of the stream is reached. |
Throws | |
---|---|
IOException |
if an I/O error occurs. |
int read (byte[] b, int off, int len)
将最多len
个字节的数据从输入流中读取到一个字节数组中。 尝试读取多达len
个字节,但可以读取较小的数字。 实际读取的字节数作为整数返回。
此方法阻塞,直到输入数据可用,检测到文件结尾或引发异常。
如果len
为零,则不读取字节并返回0
; 否则,尝试读取至少一个字节。 如果因为流在文件结尾而没有可用字节,则返回值-1
; 否则,至少读取一个字节并存储到b
。
读取的第一个字节存储到元素b[off]
,下一个存储到b[off+1]
,依此类推。 读取的字节数最多等于len
。 令k为实际读取的字节数; 这些字节将存储在元素b[off]
至b[off+
k -1]
,从而使元素b[off+
k ]
至b[off+len-1]
不受影响。
在每种情况下,元素 b[0]
到 b[off]
和元素 b[off+len]
到 b[b.length-1]
都不受影响。
该read(b,
off,
len)
类方法InputStream
简单地调用该方法read()
反复。 如果第一次这样的呼叫导致IOException
,则该异常从呼叫返回到read(b,
off,
len)
方法。 如果对read()
任何后续调用导致IOException
,则将该例外作为文件结尾进行捕获和处理; 到此为止读取的字节将被存储到b
并返回发生异常之前读取的字节数。 此方法的默认实现会阻塞,直到读取了所请求的输入数据量len
,检测到文件结尾或引发异常为止。 鼓励子类提供更高效的方法实现。
Parameters | |
---|---|
b |
byte : the buffer into which the data is read. |
off |
int : the start offset in array b at which the data is written. |
len |
int : the maximum number of bytes to read. |
Returns | |
---|---|
int |
the total number of bytes read into the buffer, or -1 if there is no more data because the end of the stream has been reached. |
Throws | |
---|---|
IOException |
If the first byte cannot be read for any reason other than end of file, or if the input stream has been closed, or if some other I/O error occurs. |
NullPointerException |
If b is null . |
IndexOutOfBoundsException |
If off is negative, len is negative, or len is greater than b.length - off |
也可以看看:
int read (byte[] b)
从输入流中读取一些字节数并将它们存储到缓冲区阵列b
。 实际读取的字节数作为整数返回。 此方法阻塞,直到输入数据可用,检测到文件结尾或引发异常。
如果b
的长度为零,则不读取任何字节并返回0
; 否则,尝试读取至少一个字节。 如果由于流位于文件末尾而没有可用字节,则返回值-1
; 否则,至少读取一个字节并存储到b
。
读取的第一个字节存储在元素b[0]
,下一个存储到b[1]
,依此类推。 读取的字节数最多等于b
的长度。 令k为实际读取的字节数; 这些字节将存储在元素b[0]
至b[
k -1]
,从而使元素b[
k ]
至b[b.length-1]
不受影响。
类 InputStream
的 read(b)
方法具有与以下相同的效果:
read(b, 0, b.length)
Parameters | |
---|---|
b |
byte : the buffer into which the data is read. |
Returns | |
---|---|
int |
the total number of bytes read into the buffer, or -1 if there is no more data because the end of the stream has been reached. |
Throws | |
---|---|
IOException |
If the first byte cannot be read for any reason other than the end of the file, if the input stream has been closed, or if some other I/O error occurs. |
NullPointerException |
if b is null . |
也可以看看:
void reset ()
将此流重新定位到上次在此输入流上调用 mark
方法时的位置。
reset
的总合同是:
markSupported
returns true
, then:
mark
has not been called since the stream was created, or the number of bytes read from the stream since mark
was last called is larger than the argument to mark
at that last call, then an IOException
might be thrown. IOException
is not thrown, then the stream is reset to a state such that all the bytes read since the most recent call to mark
(or since the start of the file, if mark
has not been called) will be resupplied to subsequent callers of the read
method, followed by any bytes that otherwise would have been the next input data as of the time of the call to reset
. markSupported
returns false
, then:
reset
may throw an IOException
. IOException
is not thrown, then the stream is reset to a fixed state that depends on the particular type of the input stream and how it was created. The bytes that will be supplied to subsequent callers of the read
method depend on the particular type of the input stream. 该方法 reset
类 InputStream
什么也不做只是抛出一个 IOException
。
Throws | |
---|---|
IOException |
if this stream has not been marked or if the mark has been invalidated. |
也可以看看:
long skip (long n)
跳过并丢弃来自此输入流的n
字节的数据。 由于各种原因, skip
方法可能会跳过一些较小数量的字节,可能是0
。 这可能是由于任何一种情况造成的。 在n
字节被跳过之前达到文件n
只是一种可能性。 返回跳过的实际字节数。 如果n
为负数,则不会跳过字节。
skip
方法创建一个字节数组,然后重复读入它,直到读取了n
个字节或已到达流的末尾。 鼓励子类提供更高效的方法实现。 例如,实施可能取决于寻求的能力。
Parameters | |
---|---|
n |
long : the number of bytes to be skipped. |
Returns | |
---|---|
long |
the actual number of bytes skipped. |
Throws | |
---|---|
IOException |
if the stream does not support seek, or if some other I/O error occurs. |