- java.lang.Object
-
- java.io.InputStream
-
- All Implemented Interfaces:
-
Closeable
,AutoCloseable
- 已知直接子类:
-
AudioInputStream
,ByteArrayInputStream
,FileInputStream
,FilterInputStream
,InputStream
,ObjectInputStream
,PipedInputStream
,SequenceInputStream
,StringBufferInputStream
public abstract class InputStream extends Object implements Closeable
这个抽象类是表示输入字节流的所有类的超类。需要定义
InputStream
子类的应用程序必须始终提供一种返回输入的下一个字节的方法。- 从以下版本开始:
- 1.0
- 另请参见:
-
BufferedInputStream
,ByteArrayInputStream
,DataInputStream
,FilterInputStream
,read()
,OutputStream
,PushbackInputStream
-
-
构造方法摘要
构造方法 Constructor 描述 InputStream()
-
方法摘要
所有方法 接口方法 抽象方法 具体的方法 Modifier and Type 方法 描述 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
个字节的数据到字节数组。byte[]
readAllBytes()
从输入流读取所有剩余字节。int
readNBytes(byte[] b, int off, int len)
将所请求的字节数从输入流读入给定的字节数组。void
reset()
将此流重新定位到最后在此输入流上调用mark
方法时的位置。long
skip(long n)
跳过并丢弃来自此输入流的n
字节的数据。long
transferTo(OutputStream out)
从该输入流中读取所有字节,并按读取的顺序将字节写入给定的输出流。
-
-
-
方法详细信息
-
read
public abstract int read() throws IOException
从输入流读取数据的下一个字节。 值字节返回为int
,范围为0
至255
。 如果没有字节可用,因为已经到达流的末尾,则返回值-1
。 该方法阻塞直到输入数据可用,检测到流的结尾,或抛出异常。一个子类必须提供这个方法的一个实现。
- 结果
-
数据的下一个字节,如果达到流的末尾,
-1
。 - 异常
-
IOException
- 如果发生I / O错误。
-
read
public int read(byte[] b) throws IOException
从输入流中读取一些字节数,并将它们存储到缓冲器阵列b
。 实际读取的字节数作为整数返回。 该方法阻塞直到输入数据可用,检测到文件结束或抛出异常。如果
b
的长度为零,则不会读取字节并返回0
; 否则,尝试读取至少一个字节。 如果没有字节可用,因为流在文件末尾,则返回值-1
; 否则,读取至少一个字节并将其存储到b
。读取的第一个字节存储在元素
b[0]
,下一个字节存入b[1]
,依此类推。 读取的字节数最多等于b
的长度。 令k为实际读取的字节数; 这些字节将被存储在元素b[0]
通过b[
ķ-1]
,留下元件b[
ķ]
通过b[b.length-1]
不受影响。该
read(b)
类方法InputStream
具有相同的效果为:read(b, 0, b.length)
- 参数
-
b
- 读取数据的缓冲区。 - 结果
-
读入缓冲区的总字节数,如果没有更多的数据,因为已经达到流的结束,则读取的字节数为
-1
。 - 异常
-
IOException
- 如果第一个字节由于除文件结尾之外的任何原因而无法读取,如果输入流已关闭,或者发生其他I / O错误。 -
NullPointerException
- 如果b
是null
。 - 另请参见:
-
read(byte[], int, int)
-
read
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()
-
readAllBytes
public byte[] readAllBytes() throws IOException
从输入流读取所有剩余字节。 该方法阻塞,直到所有剩余字节都已被读取,并且流检测结束,或抛出异常。 此方法不关闭输入流。当此流到达流的末尾时,此方法的进一步调用将返回一个空字节数组。
请注意,此方法适用于将所有字节读入字节数组的简单情况。 它不是用于读取具有大量数据的输入流。
输入流异步关闭的情况或读取期间的线程中断的行为是高度输入流特定的,因此未指定。
如果从输入流读取I / O错误,则可能会在读取一些但不是全部的字节之后执行此操作。 因此,输入流可能不是流的结尾,并且可能处于不一致的状态。 强烈建议如果发生I / O错误,流将被及时关闭。
- 结果
- 一个包含从该输入流读取的字节的字节数组
- 异常
-
IOException
- 如果发生I / O错误 -
OutOfMemoryError
- 如果不能分配所需大小的数组。 例如,如果需要大于2GB
的数组来存储字节。 - 从以下版本开始:
- 9
-
readNBytes
public int readNBytes(byte[] b, int off, int len) throws IOException
将所请求的字节数从输入流读入给定的字节数组。 该方法阻塞,直到len
字节的输入数据被读取,流检测结束或抛出异常。 实际读取的字节数(可能为零)被返回。 此方法不关闭输入流。在
len
字节被读取之前到达流的结束的情况下,将返回读取的实际字节数。 当该流到达流的末尾时,该方法的进一步调用将返回零。如果
len
为零,则不会读取字节并返回0
; 否则,尝试读取最多len
个字节。读取的第一个字节存储在元素
b[off]
,下一个字节存入b[off+1]
,依此类推。 读取的字节数最多等于len
。 令k为实际读取的字节数; 这些字节将被存储在元素b[off]
通过b[off+
ķ-1]
,留下元件b[off+
ķ]
通过b[off+len-1]
不受影响。输入流异步关闭的情况或读取期间的线程中断的行为是高度输入流特定的,因此未指定。
如果从输入流读取I / O错误,则可以在
b
一些但不是全部字节已经使用输入流中的数据更新之后执行此操作。 因此,输入流和b
可能处于不一致的状态。 强烈建议如果发生I / O错误,流将被及时关闭。- 参数
-
b
- 读取数据的字节数组 -
off
- 写入数据的b
中的起始偏移量 -
len
- 要读取的最大字节数 - 结果
- 读入缓冲区的实际字节数
- 异常
-
IOException
- 如果发生I / O错误 -
NullPointerException
- 如果b
是null
-
IndexOutOfBoundsException
- 如果off
为负,len
为负数,或len
大于b.length - off
- 从以下版本开始:
- 9
-
skip
public long skip(long n) throws IOException
跳过并从该输入流中丢弃n
个字节的数据。 由于各种原因,skip
方法可能会跳过少量的字节,可能是0
。 这可能是由许多条件中的任何一个引起的 在n
字节之前已经跳过的文件到达结束只有一种可能。 返回实际跳过的字节数。 如果n
是否定的,则skip
类方法InputStream
总是返回0,并且没有字节被跳过。 子类可以不同地处理负值。skip
方法实现创建一个字节数组,然后重复读入它,直到已经读取n
个字节或已经到达流的结尾。 鼓励子类提供更有效的方法实现。 例如,实施可能取决于寻求的能力。- 参数
-
n
- 要跳过的字节数。 - 结果
- 实际跳过的字节数。
- 异常
-
IOException
- 如果发生I / O错误。
-
available
public int available() throws IOException
从下一次调用此输入流的方法返回可从该输入流读取(或跳过)的字节数,而不会阻塞。 下一个调用可能是同一个线程或另一个线程。 这个多个字节的单个读取或跳过将不会被阻塞,但可以读取或跳过较少的字节。请注意,虽然
InputStream
一些实现将返回流中的总字节数,但很多不会。 使用此方法的返回值分配用于保存此流中的所有数据的缓冲区是绝对不正确的。如果此输入流已通过调用
close()
方法关闭,则此方法的子类实现可能会选择抛出一个IOException
。该
available
类方法InputStream
总是返回0
。这个方法应该被子类覆盖。
- 结果
-
当输入流到达输入流的末尾时,可以从该输入流中读取(或跳过)的字节数,而不会阻塞或
0
的字节数。 - 异常
-
IOException
- 如果发生I / O错误。
-
close
public void close() throws IOException
关闭此输入流并释放与流相关联的任何系统资源。close
方法InputStream
也没做。- Specified by:
-
close
在接口AutoCloseable
- Specified by:
-
close
在接口Closeable
- 异常
-
IOException
- 如果发生I / O错误。
-
mark
public void mark(int readlimit)
标记此输入流中的当前位置。 随后调用reset
方法将该流重新定位在最后一个标记的位置,以便后续读取重新读取相同的字节。readlimit
参数readlimit
此输入流,以允许在标记位置无效之前读取许多字节。mark
的一般合同是,如果方法markSupported
返回true
,流可以记住在调用mark
之后读取的所有字节,并且如果和无论何时调用方法reset
都可以再次提供这些相同的字节。 但是,如果在reset
之前从流中读取多达readlimit
个字节,则流不需要记住任何数据。标记封闭的流对流不应有任何影响。
mark
方法InputStream
也没做。- 参数
-
readlimit
- 在标记位置无效之前可以读取的最大字节数限制。 - 另请参见:
-
reset()
-
reset
public void reset() throws IOException
将此流重新定位到最后在此输入流上调用mark
方法时的位置。reset
的一般合同是:- 如果方法
markSupported
返回true
,则:- 如果方法
mark
自从创建流以来mark
调用,或者从最后一次调用的mark
起从流读取的字节数大于最后一次调用时的参数mark
,则可能抛出一个IOException
。 - 如果这样的
IOException
没有抛出,那么流被重置为一个状态,使得所有字节读取自最近一次调用mark
(或自文件开始,如果mark
尚未调用)将被重新提供后续呼叫者的read
方法,其次是任何字节,否则将是下一个输入数据,在呼叫时间reset
。
- 如果方法
- 如果方法
markSupported
返回false
,则:- 致电
reset
可能会抛出一个IOException
。 - 如果没有抛出
IOException
,则流将重置为固定状态,这取决于输入流的特定类型及其创建方式。 将提供给read
方法的后续呼叫者的read
取决于输入流的特定类型。
- 致电
该方法
reset
类InputStream
什么也不做只是抛出一个IOException
。- 异常
-
IOException
- 如果此流未标记或标记已被无效。 - 另请参见:
-
mark(int)
,IOException
- 如果方法
-
markSupported
public boolean markSupported()
测试此输入流是否支持mark
和reset
方法。 是否支持mark
和reset
是特定输入流实例的不变属性。 该markSupported
方法InputStream
回报false
。
-
transferTo
public long transferTo(OutputStream out) throws IOException
从该输入流中读取所有字节,并按读取的顺序将字节写入给定的输出流。 返回时,此输入流将处于流的末尾。 此方法不关闭任一流。该方法可以阻止从输入流无限期地读取,或者写入输出流。 输入和/或输出流异步关闭的情况或传输过程中的线程中断的行为是高度输入和输出流特定的,因此未指定。
如果从输入流读取或写入输出流发生I / O错误,则可能在读取或写入某些字节后执行此操作。 因此,输入流可能不在流的结尾,并且一个或两个流可能处于不一致的状态。 强烈建议如果发生I / O错误,则两个流都会及时关闭。
- 参数
-
out
- 输出流,非空 - 结果
- 传输的字节数
- 异常
-
IOException
- 读/写时是否发生I / O错误 -
NullPointerException
- 如果out
是null
- 从以下版本开始:
- 9
-
-