- 所有已实现的接口:
-
Closeable
,AutoCloseable
ByteArrayInputStream
包含一个内部缓冲区,其中包含可以从流中读取的字节。一个内部计数器跟踪下一个由read
方法提供的字节。
关闭ByteArrayInputStream
没有任何效果。在关闭流后,仍然可以调用此类中的方法而不会生成IOException
。
- 自:
- 1.0
- 参见:
-
Field Summary
-
Constructor Summary
ConstructorDescriptionByteArrayInputStream
(byte[] buf) 创建一个ByteArrayInputStream
,使其使用buf
作为其缓冲区数组。ByteArrayInputStream
(byte[] buf, int offset, int length) 创建一个ByteArrayInputStream
,使用buf
作为其缓冲区数组。 -
Method Summary
Modifier and TypeMethodDescriptionint
返回可以从此输入流中读取(或跳过)的剩余字节数。void
close()
关闭ByteArrayInputStream
没有任何效果。void
mark
(int readAheadLimit) 设置流中当前标记的位置。boolean
测试此InputStream
是否支持标记/重置。int
read()
从此输入流中读取下一个字节的数据。int
read
(byte[] b, int off, int len) 从此输入流中最多读取len
字节的数据到字节数组中。byte[]
从输入流中读取所有剩余的字节。int
readNBytes
(byte[] b, int off, int len) 从输入流中读取请求的字节数到给定的字节数组中。void
reset()
将缓冲区重置为标记位置。long
skip
(long n) 从此输入流中跳过n
个字节的输入。Methods declared in class java.io.InputStream
nullInputStream, read, readNBytes, skipNBytes, transferTo
-
Field Details
-
buf
protected byte[] buf由流的创建者提供的字节数组。元素buf[0]
到buf[count-1]
是唯一可以从流中读取的字节;元素buf[pos]
是要读取的下一个字节。 -
pos
protected int pos从输入流缓冲区中读取的下一个字节的索引。此值应始终为非负且不大于count
的值。要从输入流缓冲区中读取的下一个字节将是buf[pos]
。 -
mark
protected int mark流中当前标记的位置。ByteArrayInputStream对象在构造时默认标记在位置零。它们可以通过mark()
方法在缓冲区内的另一个位置标记。通过reset()
方法将当前缓冲区位置设置为此点。如果未设置标记,则标记的值是传递给构造函数的偏移量(如果未提供偏移量,则为0)。
- 自:
- 1.1
-
count
protected int count输入流缓冲区中最后一个有效字节的索引加一。此值应始终为非负且不大于buf
的长度。它比可以从输入流缓冲区中读取的buf
内最后一个字节的位置大一。
-
-
Constructor Details
-
ByteArrayInputStream
public ByteArrayInputStream(byte[] buf) 创建一个ByteArrayInputStream
,使其使用buf
作为其缓冲区数组。不会复制缓冲区数组。pos
的初始值为0
,count
的初始值为buf
的长度。- 参数:
-
buf
- 输入缓冲区。
-
ByteArrayInputStream
public ByteArrayInputStream(byte[] buf, int offset, int length) 创建一个使用buf
作为其缓冲区数组的ByteArrayInputStream
。pos
的初始值为offset
,count
的初始值为offset+length
和buf.length
的最小值。不会复制缓冲区数组。缓冲区的标记设置为指定的偏移量。- 参数:
-
buf
- 输入缓冲区。 -
offset
- 要读取的第一个字节在缓冲区中的偏移量。 -
length
- 从缓冲区中读取的最大字节数。
-
-
Method Details
-
read
public int read()从此输入流中读取下一个字节的数据。字节值作为0
到255
范围内的int
返回。如果没有字节可用,因为已到达流的末尾,则返回值为-1
。此
read
方法不会阻塞。- 指定者:
-
read
在类InputStream
- 返回:
-
下一个数据字节,如果已到达流的末尾,则返回
-1
。
-
read
public int read(byte[] b, int off, int len) 从此输入流中读取最多len
字节的数据到字节数组中。如果pos
等于count
,则返回-1
以指示文件结束。否则,读取的字节数k
等于len
和count-pos
的较小值。如果k
为正数,则通过System.arraycopy
的方式将字节buf[pos]
到buf[pos+k-1]
复制到b[off]
到b[off+k-1]
中。将值k
添加到pos
中,并返回k
。与
InputStream
的重写方法
不同,如果已到达流的末尾且len == 0
,则此方法返回-1
而不是零。此
read
方法不会阻塞。- 覆盖:
-
read
在类InputStream
- 参数:
-
b
- 读取数据的缓冲区。 -
off
- 写入数据的数组b
中的起始偏移量。 -
len
- 要读取的最大字节数。 - 返回:
-
读入缓冲区的总字节数,如果没有更多数据因为已到达流的末尾,则返回
-1
。 - 抛出:
-
NullPointerException
- 如果b
为null
。 -
IndexOutOfBoundsException
- 如果off
为负数,len
为负数,或len
大于b.length - off
。 - 参见:
-
readAllBytes
public byte[] readAllBytes()从类中复制的描述:InputStream
从输入流中读取所有剩余的字节。此方法将阻塞,直到读取所有剩余的字节并检测到流的末尾,或抛出异常。此方法不会关闭输入流。当此流到达流的末尾时,进一步调用此方法将返回一个空字节数组。
请注意,此方法适用于简单情况,其中将所有字节读入字节数组中很方便。它不适用于读取大量数据的输入流。
当输入流异步关闭或在读取过程中线程中断时的行为是高度特定于输入流的,因此未指定。
如果从输入流读取时发生I/O错误,则在读取一些但不是所有字节后可能会发生。因此,如果发生I/O错误,强烈建议立即关闭流。
- 覆盖:
-
readAllBytes
在类InputStream
- 返回:
- 包含从此输入流中读取的字节的字节数组
-
readNBytes
public int readNBytes(byte[] b, int off, int len) 从类中复制的描述:InputStream
从输入流中读取请求的字节数到给定的字节数组中。此方法将阻塞,直到读取len
字节的输入数据,检测到流的末尾,或抛出异常。实际读取的字节数,可能为零,将被返回。此方法不会关闭输入流。在读取
len
字节之前达到流的末尾的情况下,将返回实际读取的字节数。当此流到达流的末尾时,进一步调用此方法将返回零。如果
len
为零,则不会读取任何字节,并返回0
;否则,将尝试读取最多len
字节。第一个读取的字节存储在元素
b[off]
中,下一个字节存储在b[off+1]
中,依此类推。读取的字节数最多等于len
。设k为实际读取的字节数;这些字节将存储在元素b[off]
到b[off+
k-1]
中,使元素b[off+
k]
到b[off+len-1]
不受影响。当输入流异步关闭或在读取过程中线程中断时的行为是高度特定于输入流的,因此未指定。
如果从输入流读取时发生I/O错误,则在更新了一些但不是所有
b
字节后可能会发生。因此,如果发生I/O错误,强烈建议立即关闭流。- 覆盖:
-
readNBytes
在类InputStream
- 参数:
-
b
- 读取数据的字节数组 -
off
- 数据写入字节数组 b 的起始偏移量 -
len
- 要读取的最大字节数 - 返回:
- 实际读取到缓冲区中的字节数
-
skip
public long skip(long n) 跳过此输入流中的n
字节。如果到达输入流的末尾,则可能会跳过较少的字节。要跳过的实际字节数k
等于n
和count-pos
中较小的那个。将值k
添加到pos
中,并返回k
。- 覆盖:
-
skip
在类InputStream
- 参数:
-
n
- 要跳过的字节数 - 返回:
- 实际跳过的字节数
- 参见:
-
available
public int available()返回可以从此输入流中读取(或跳过)的剩余字节数。返回的值为
count - pos
,即从输入缓冲区中剩余要读取的字节数。- 覆盖:
-
available
在类InputStream
- 返回:
- 可以从此输入流中读取(或跳过)的剩余字节数,而不会阻塞。
-
markSupported
public boolean markSupported()测试此InputStream
是否支持标记/重置。- 覆盖:
-
markSupported
在类InputStream
- 实现要求:
-
ByteArrayInputStream
的markSupported
方法始终返回true
。 - 返回:
- true
- 自:
- 1.1
- 参见:
-
mark
public void mark(int readAheadLimit) 在流中设置当前标记位置。ByteArrayInputStream对象在构造时默认在位置零处标记。它们可以通过此方法在缓冲区中的另一个位置进行标记。如果未设置标记,则标记的值为传递给构造函数的偏移量(如果未提供偏移量,则为0)。
注意:此类的
readAheadLimit
没有意义。- 覆盖:
-
mark
在类InputStream
- 参数:
-
readAheadLimit
- 在标记位置变为无效之前可以读取的最大字节数。 - 自:
- 1.1
- 参见:
-
reset
public void reset()将缓冲区重置为标记位置。除非另一个位置被标记或在构造函数中指定了偏移量,否则标记位置为0。- 覆盖:
-
reset
在类InputStream
- 参见:
-
close
关闭ByteArrayInputStream
没有任何效果。在关闭流后,仍然可以调用此类中的方法而不会生成IOException
。- 指定者:
-
close
在接口AutoCloseable
- 指定者:
-
close
在接口Closeable
- 覆盖:
-
close
在类InputStream
- 抛出:
-
IOException
- 如果发生I/O错误。
-