- 所有已实现的接口:
Closeable
,AutoCloseable
ByteArrayInputStream
包含一个内部缓冲区,其中包含可以从流中读取的字节。内部计数器跟踪 read
方法提供的下一个字节。
关闭 ByteArrayInputStream
没有任何效果。可以在流关闭后调用此类中的方法而不生成 IOException
。
- 自从:
- 1.0
- 参见:
-
字段摘要
字段 -
构造方法总结
构造方法构造方法描述ByteArrayInputStream
(byte[] buf) 创建一个ByteArrayInputStream
,以便它使用buf
作为其缓冲区数组。ByteArrayInputStream
(byte[] buf, int offset, int length) 创建使用buf
作为其缓冲区数组的ByteArrayInputStream
。 -
方法总结
修饰符和类型方法描述int
返回可以从此输入流中读取(或跳过)的剩余字节数。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
个字节的输入。在类 java.io.InputStream 中声明的方法
nullInputStream, read, readNBytes, skipNBytes, transferTo
-
字段详细信息
-
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比输入流缓冲区中最后一个有效字符大 1 的索引。该值应始终为非负数且不大于buf
的长度。它比buf
中可以从输入流缓冲区读取的最后一个字节的位置大 1。
-
-
构造方法详细信息
-
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
- 从缓冲区读取的最大字节数。
-
-
方法详情
-
read
public int read()从此输入流中读取下一个字节的数据。值字节作为int
在0
到255
范围内返回。如果因为已到达流的末尾而没有可用字节,则返回值-1
。此
read
方法无法阻止。- 指定者:
read
在类InputStream
中- 返回:
-
下一个数据字节,如果到达流的末尾则为
-1
。
-
read
public int read(byte[] b, int off, int len) 从此输入流中将最多len
字节的数据读入字节数组。如果pos
等于count
,则返回-1
以指示文件结束。否则,读取的字节数k
等于len
和count-pos
中的较小者。如果k
为正,则字节buf[pos]
到buf[pos+k-1]
将以System.arraycopy
执行的方式复制到b[off]
到b[off+k-1]
中。值k
添加到pos
并返回k
。与
InputStream
的overridden method
不同,如果已到达流的末尾,则此方法返回-1
而不是零和len == 0
。此
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
的一些(但不是全部)字节已用输入流中的数据更新后执行此操作。因此,输入流和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 错误。
-