来自java文档 InputStream类 – 巫

java.io类 InputStream

java.lang.Object

java.io.InputStream

所有已实现的接口:

Closeable

直接已知子类:

AudioInputStream,ByteArrayInputStream,FileInputStream,FilterInputStream,InputStream,ObjectInputStream,PipedInputStream,SequenceInputStream,StringBufferInputStream


public abstract classInputStream

extendsObject

implementsCloseable

此抽象类是表示字节输入流的所有类的超类。

需要定义 InputStream子类的应用程序必须总是提供返回下一个输入字节的方法。

从以下版本开始:

JDK1.0

另请参见:

BufferedInputStream,ByteArrayInputStream,DataInputStream,FilterInputStream,read(),OutputStream,PushbackInputStream


构造方法摘要

InputStream()

方法摘要

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 数组。

void

reset()将此流重新定位到最后一次对此输入流调用 mark方法时的位置。

long

skip(long n) 跳过和丢弃此输入流中数据的 n个字节。

从类 java.lang.Object继承的方法

clone,equals, finalize,getClass, hashCode,notify, notifyAll,toString, wait,wait, wait

构造方法详细信息

InputStream

publicInputStream()

方法详细信息

read

public abstract intread()

throwsIOException

从输入流中读取数据的下一个字节。返回 0到 255 范围内的 int 字节值。如果因为已经到达流末尾而没有可用的字节,则返回值 -1。在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞。

子类必须提供此方法的一个实现。

返回:

下一个数据字节;如果到达流的末尾,则返回 -1。

抛出:

IOException -如果发生 I/O 错误。


read

public intread(byte[] b)

throws IOException

从输入流中读取一定数量的字节,并将其存储在缓冲区数组 b中。以整数形式返回实际读取的字节数。在输入数据可用、检测到文件末尾或者抛出异常前,此方法一直阻塞。

如果 b 的长度为 0,则不读取任何字节并返回 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)

参数:

b – 存储读入数据的缓冲区。

返回:

读入缓冲区的总字节数;如果因为已经到达流末尾而不再有数据可用,则返回 -1。

抛出:

IOException -如果不是因为流位于文件末尾而无法读取第一个字节;如果输入流已关闭;如果发生其他 I/O错误。

NullPointerException -如果 b 为 null。

另请参见:

read(byte[],int, int)


read

public intread(byte[] b,

intoff,

intlen)

throws IOException

将输入流中最多 len 个数据字节读入 byte 数组。尝试读取 len 个字节,但读取的字节也可能小于该值。以整数形式返回实际读取的字节数。

在输入数据可用、检测到流末尾或者抛出异常前,此方法一直阻塞。

如果 len 为 0,则不读取任何字节并返回 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]的元素都不会受到影响。

类 InputStream 的 read(b, off, len)方法重复调用方法 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()


skip

public longskip(long n)

throws IOException

跳过和丢弃此输入流中数据的 n 个字节。出于各种原因,skip 方法结束时跳过的字节数可能小于该数,也可能为 0。导致这种情况的原因很多,跳过 n个字节之前已到达文件末尾只是其中一种可能。返回跳过的实际字节数。如果 n 为负,则不跳过任何字节。

此类的 skip 方法创建一个 byte数组,然后重复将字节读入其中,直到读够 n 个字节或已到达流末尾为止。建议子类提供此方法更为有效的实现。例如,可依赖搜索能力的实现。

参数:

n – 要跳过的字节数。

返回:

跳过的实际字节数。

抛出:

IOException -如果流不支持搜索,或者发生其他 I/O错误。


available

public intavailable()

throwsIOException

返回此输入流下一个方法调用可以不受阻塞地从此输入流读取(或跳过)的估计字节数。下一个调用可能是同一个线程,也可能是另一个线程。一次读取或跳过此估计数个字节不会受阻塞,但读取或跳过的字节数可能小于该数。

注意,有些 InputStream的实现将返回流中的字节总数,但也有很多实现不会这样做。试图使用此方法的返回值分配缓冲区,以保存此流所有数据的做法是不正确的。

如果已经调用 close()方法关闭了此输入流,那么此方法的子类实现可以选择抛出IOException。

类 InputStream 的 available 方法总是返回 0。

此方法应该由子类重写。

返回:

可以不受阻塞地从此输入流读取(或跳过)的估计字节数;如果到达输入流末尾,则返回 0。

抛出:

IOException -如果发生 I/O 错误。


close

public voidclose()

throws IOException

关闭此输入流并释放与该流关联的所有系统资源。

InputStream 的close方法不执行任何操作。

指定者:

接口 Closeable中的 close

抛出:

IOException -如果发生 I/O 错误。


mark

public voidmark(int readlimit)

在此输入流中标记当前的位置。对reset方法的后续调用会在最后标记的位置重新定位此流,以便后续读取重新读取相同的字节。

readlimit 参数告知此输入流在标记位置失效之前允许读取的字节数。

mark 的常规协定是:如果方法markSupported返回 true,那么输入流总是在调用 mark 之后记录所有读取的字节,并时刻准备在调用方法 reset 时(无论何时),再次提供这些相同的字节。但是,如果在调用 reset之前可以从流中读取多于 readlimit 的字节,则不需要该流记录任何数据。

标记已关闭的流对其无效。

InputStream 的mark方法不执行任何操作。

参数:

readlimit – 在标记位置失效前可以读取字节的最大限制。

另请参见:

reset()


reset

public voidreset()

throws IOException

将此流重新定位到最后一次对此输入流调用 mark方法时的位置。

reset 的常规协定是:

·如果方法markSupported返回 true,那么:

o如果创建流以后未调用方法mark,或最后调用 mark 以后从该流读取的字节数大于最后调用 mark 时的参数,则可能抛出 IOException。

o如果未抛出这样的IOException,则将该流重新设置为这种状态:最近一次调用 mark 以后(如果未调用过 mark,则从文件开头开始)读取的所有字节将重新提供给 read方法的后续调用者,后跟任何从调用 reset 时起将作为下一输入数据的字节。

·如果方法markSupported返回 false,那么:

o对 reset的调用可能抛出 IOException。

o如果未抛出IOException,则将该流重新设置为一种固定状态,该状态取决于输入流的特定类型及其创建方式。提供给read方法后续调用者的字节取决于特定类型的输入流。

除了抛出 IOException 之外,类 InputStream的方法 reset 不执行任何操作。

抛出:

IOException -如果未标记此流或该标记失效。

另请参见:

mark(int),IOException


markSupported

public booleanmarkSupported()

测试此输入流是否支持 mark 和 reset 方法。是否支持 mark 和 reset是特定输入流实例的不变属性。InputStream 的 markSupported方法返回 false。

返回:

如果此输入流实例支持 mark 和 reset 方法,则返回 true;否则返回 false。

另请参见:

mark(int),reset()

那些无法讲述的悲伤和苍凉,

来自java文档 InputStream类 – 巫

相关文章:

你感兴趣的文章:

标签云: