public abstract class InputStream extends Object implements Closeable
需要定义InputStream
子类的应用InputStream
必须始终提供一种返回输入的下一个字节的方法。
BufferedInputStream
, ByteArrayInputStream
, DataInputStream
, FilterInputStream
, read()
, OutputStream
, PushbackInputStream
Constructor and Description |
---|
InputStream() |
Modifier and Type | Method and Description |
---|---|
int |
available()
返回从该输入流中可以读取(或跳过)的字节数的估计值,而不会被下一次调用此输入流的方法阻塞。
|
void |
close()
关闭此输入流并释放与流相关联的任何系统资源。
|
void |
mark(int readlimit)
标记此输入流中的当前位置。
|
boolean |
markSupported()
测试这个输入流是否支持
mark 和
reset 方法。
|
abstract int |
read()
从输入流读取数据的下一个字节。
|
int |
read(byte[] b)
从输入流读取一些字节数,并将它们存储到缓冲区
b 。
|
int |
read(byte[] b, int off, int len)
从输入流读取最多
len 字节的数据到一个字节数组。
|
void |
reset()
将此流重新定位到上次在此输入流上调用
mark 方法时的位置。
|
long |
skip(long n)
跳过并丢弃来自此输入流的
n 字节数据。
|
public abstract int read() throws IOException
int
范围0
至255
。
如果没有字节可用,因为已经到达流的末尾,则返回值-1
。
该方法阻塞直到输入数据可用,检测到流的结尾,或抛出异常。
一个子类必须提供这个方法的一个实现。
-1
。
IOException
- 如果发生I / O错误。
public int read(byte[] b) throws IOException
b
。
实际读取的字节数作为整数返回。
该方法阻塞直到输入数据可用,检测到文件结束或抛出异常。
如果b
的长度为零,则不会读取字节并返回0
; 否则,尝试读取至少一个字节。 如果没有字节可用,因为流在文件末尾,则返回值-1
; 否则,读取至少一个字节并存储到b
。
第一个字节读取存储在元素b[0]
,下一个字节存入b[1]
等等。 读取的字节数最多等于b
的长度。 令k为实际读取的字节数; 这些字节将存储在元素b[0]
至b[
k -1]
,使元素b[
k ]
至b[b.length-1]
不受影响。
该read(b)
用于类方法InputStream
具有相同的效果为:
read(b, 0, b.length)
b
- 读取数据的缓冲区。
-1
。
IOException
- 如果由于文件结尾以外的任何原因,如果输入流已关闭,或者发生其他I / O错误,则无法读取第一个字节。
NullPointerException
- 如果
b
是
null
。
read(byte[], int, int)
public int read(byte[] b, int off, int len) throws IOException
len
字节的数据到一个字节数组。
尝试读取多达len
个字节,但可以读取较小的数字。
实际读取的字节数作为整数返回。
该方法阻塞直到输入数据可用,检测到文件结束或抛出异常。
如果len
为零,则不会读取字节并返回0
; 否则,尝试读取至少一个字节。 如果没有字节可用,因为流是文件的-1
则返回值-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
已被读取,文件结束被检测到或异常被抛出为止。 鼓励子类提供更有效的方法实现。
b
- 读取数据的缓冲区。
off
- 写入数据的数组
b
中的起始偏移量。
len
- 要读取的最大字节数。
-1
。
IOException
- 如果由于文件结束之外的任何原因,或者输入流已关闭,或者发生其他I / O错误,则无法读取第一个字节。
NullPointerException
- 如果
b
是
null
。
IndexOutOfBoundsException
- 如果
off
为负数,
len
为负数,或
len
大于
b.length - off
read()
public long skip(long n) throws IOException
n
字节数据。
由于各种原因, skip
方法可能会跳过一些较小数量的字节,可能是0
。
这可能是由许多条件中的任何一个引起的
n
字节之前已经跳过的文件到达结束只有一种可能。
返回实际跳过的字节数。
如果n
是否定的,则skip
类方法InputStream
总是返回0,并且没有字节被跳过。
子类可以不同地处理负值。
skip
方法创建一个字节数组,然后重复读入它,直到已读取n
个字节或已达到流的结尾。 鼓励子类提供更有效的方法实现。 例如,实施可能取决于寻求的能力。
n
- 要跳过的字节数。
IOException
- 如果流不支持查询,或者发生其他I / O错误。
public int available() throws IOException
注意,尽管一些实现InputStream
将在流中返回的字节总数,许多人不会。 使用此方法的返回值分配用于保存此流中的所有数据的缓冲区是绝对不正确的。
子类此方法的实现可以选择抛出IOException
如果输入流已通过调用关闭close()
方法。
该available
类方法InputStream
总是返回0
。
这个方法应该被子类覆盖。
0
。
IOException
- 如果发生I / O错误。
public void close() throws IOException
该close
的方法InputStream
什么都不做。
close
在接口
Closeable
close
在接口
AutoCloseable
IOException
- 如果发生I / O错误。
public void mark(int readlimit)
reset
方法的后续调用会将该流重新定位在最后一个标记的位置,以便后续读取重新读取相同的字节。
readlimit
参数告诉这个输入流,以允许在标记位置无效之前读取许多字节。
的总承包mark
是,如果该方法markSupported
返回true
,流莫名其妙地记得电话后读取到所有字节mark
,并随时准备再次提供那些相同的字节,如果每当方法reset
被调用。 但是,如果在reset
之前从流中读取超过readlimit
个字节,则流不需要记住任何数据。
标记封闭的流对流不应有任何影响。
该mark
的方法InputStream
什么都不做。
readlimit
- 标记位置无效之前可以读取的最大字节数。
reset()
public void reset() throws IOException
mark
方法时的位置。
reset
的总合同是:
markSupported
返回true
,则:
mark
由于上述流创建没有被调用,或从流中读取的字节数,因为mark
最后调用比参数大mark
在最后一次调用,那么IOException
可能会被抛出。 IOException
不抛出,那么流被重置为一个状态,使得所有字节读取自最近一次调用mark
(或自文件开始,如果mark
尚未调用)将被重新提供后续read
方法的呼叫者,之后是到reset
呼叫时间的下一个输入数据的任何字节。 markSupported
返回false
,那么:
reset
可能会抛出一个IOException
。 IOException
,则流将重置为固定状态,这取决于输入流的特定类型及其创建方式。 将提供给read方法的后续调用者的read
取决于输入流的特定类型。 该方法reset
类InputStream
什么也不做只是抛出一个IOException
。
IOException
- 如果该流未被标记或标记已被无效。
mark(int)
, IOException