你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

SubStream 类

  • java.lang.Object
    • InputStream
      • com.microsoft.azure.storage.blob.SubStream

public class SubStream

构造函数摘要

构造函数 说明
SubStream(InputStream source, long startIndex, long streamLength, Object lock)

创建一个新的子流实例,该实例将包装的流从 向上分区。 包装相同基础的每个子流实例必须共享相同的互斥,以避免并发操作的争用条件。

方法摘要

修饰符和类型 方法和描述
void close()

关闭子流。

InputStream getInputStream()
long getLength()
synchronized void mark(int readlimit)

标记子流中的当前位置。 对 方法的后续调用会将流重新定位到此存储位置。

boolean markSupported()

子流包装器类仅与可标记输入流兼容,因此始终返回 true。 此要求在类构造函数中强制执行。

int read()

从包装的流中读取下一字节的数据。 值字节作为 在 范围中返回。 如果由于已到达子流的末尾而没有可用的字节,则返回 值。 此方法会阻止,直到输入数据可用、检测到流的末尾或引发异常。

synchronized int read(byte[] b)

从包装的流中读取一定数量的字节,并将其存储在缓冲区数组 中。 实际读取的字节数作为整数返回。 此方法会阻止,直到输入数据可用、检测到文件末尾或引发异常。

如果 的长度为零,则不读取任何字节并返回;否则,将尝试读取至少一个字节。 如果由于子流位于文件末尾而没有字节可用,则返回 值;否则,至少读取一个字节并将其存储到 中。

第一个字节读取存储在 元素中,下一个字节将存储到 中,依此存储。 读取的字节数最多等于 的长度。 让 k 是实际读取的字节数;这些字节将通过 k 存储在元素中,使元素 k 不受影响。

类的 方法具有相同的效果:

synchronized int read(byte[] b, int off, int len)

从子流中读取最多字节的数据。 缓冲包装流中的数据,以最大程度地减少跳过和读取开销。 仅当 readBuffer 无法满足读取请求时,才会调用包装流。 为了确保结果有效,必须在从子流读取之前标记包装的流。 这允许我们重置为包装流中的相对子流位置。 实际读取的字节数以整数形式返回。 所有这些操作都是在固有锁内同步完成的,以确保子流实例的其他并发请求不会导致争用条件。

对包装流读取的基础调用将阻止,直到输入数据可用、检测到文件结尾或引发异常为止。

如果 为零,则不读取任何字节并返回;否则,将尝试读取至少一个字节。 如果由于子流位于文件末尾而没有可用的字节,则返回值;否则,至少读取一个字节并将其存储到 中。

synchronized void reset()

将子流位置重新定位到上次调用方法的索引。

子流上的新重置位置在后续读取之前不会生效。

long skip(long n)

通过 向前推进子流的当前位置。 方法不调用包装流类的基础方法。 在后续子流读取操作期间,将考虑实际跳过的字节数。

构造函数详细信息

SubStream

public SubStream(InputStream source, long startIndex, long streamLength, Object lock)

创建一个新的子流实例,该实例将包装的流从 向上分区。 包装相同基础的每个子流实例必须共享相同的互斥,以避免并发操作的争用条件。

Parameters:

source - 要包装的可标记 InputStream。
startIndex - 包装流中的有效索引,子流应从逻辑上开始。
streamLength - 子流的长度。
lock - 一个内部锁,用于确保对包装相同 InputStream 的子流实例执行线程安全的并发操作。

方法详细信息

close

public void close()

关闭子流。

getInputStream

public InputStream getInputStream()

getLength

public long getLength()

mark

public synchronized void mark(int readlimit)

标记子流中的当前位置。 对 方法的后续调用会将流重新定位到此存储位置。

Parameters:

readlimit - 标记位置无效之前可以读取的最大字节数限制。

markSupported

public boolean markSupported()

子流包装器类仅与可标记输入流兼容,因此始终返回 true。 此要求在类构造函数中强制执行。

Returns:

true

read

public int read()

从包装的流中读取下一字节的数据。 值字节作为 在 范围中返回。 如果由于已到达子流的末尾而没有可用的字节,则返回 值。 此方法会阻止,直到输入数据可用、检测到流的末尾或引发异常。

Returns:

数据的下一个字节,或者 -1 ,如果已到达子流的末尾,则为 。

Throws:

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

read

public synchronized int read(byte[] b)

从包装的流中读取一定数量的字节,并将其存储在缓冲区数组 中。 实际读取的字节数作为整数返回。 此方法会阻止,直到输入数据可用、检测到文件末尾或引发异常。

如果 的长度为零,则不读取任何字节并返回;否则,将尝试读取至少一个字节。 如果由于子流位于文件末尾而没有字节可用,则返回 值;否则,至少读取一个字节并将其存储到 中。

第一个字节读取存储在 元素中,下一个字节将存储到 中,依此存储。 读取的字节数最多等于 的长度。 让 k 是实际读取的字节数;这些字节将通过 k 存储在元素中,使元素 k 不受影响。

类的 方法具有相同的效果:

Parameters:

b - 将数据读取到其中的缓冲区。

Returns:

读取到缓冲区的字节总数,或者 -1 如果没有其他数据,因为已到达流的末尾。

Throws:

IOException - 如果由于文件末尾以外的任何原因而无法读取第一个字节,如果已关闭包装流,或者如果发生其他 I/O 错误,则为 。
NullPointerException - 如果 为 ,则nullb

read

public synchronized int read(byte[] b, int off, int len)

从子流中读取最多字节的数据。 缓冲包装流中的数据,以最大程度地减少跳过和读取开销。 仅当 readBuffer 无法满足读取请求时,才会调用包装流。 为了确保结果有效,必须在从子流读取之前标记包装的流。 这允许我们重置为包装流中的相对子流位置。 实际读取的字节数以整数形式返回。 所有这些操作都是在固有锁内同步完成的,以确保子流实例的其他并发请求不会导致争用条件。

对包装流读取的基础调用将阻止,直到输入数据可用、检测到文件结尾或引发异常为止。

如果 为零,则不读取任何字节并返回;否则,将尝试读取至少一个字节。 如果由于子流位于文件末尾而没有可用的字节,则返回值;否则,至少读取一个字节并将其存储到 中。

Parameters:

b - 将数据读入其中的缓冲区。
off - 数组 b 中写入数据的起始偏移量。
len - 要读取的最大字节数。

Returns:

读取到缓冲区的总字节数;如果已到达流的末尾, -1 则为没有更多数据。

Throws:

IOException - 如果第一个字节因文件结尾以外的任何原因而无法读取,或者已关闭包装的流,或者发生其他 I/O 错误。
NullPointerException - 如果 bnull
IndexOutOfBoundsException - 如果 off 为负数、 len 为负数或 len 大于 b.length - off

reset

public synchronized void reset()

将子流位置重新定位到上次调用方法的索引。

子流上的新重置位置在后续读取之前不会生效。

skip

public long skip(long n)

通过 向前推进子流的当前位置。 方法不调用包装流类的基础方法。 在后续子流读取操作期间,将考虑实际跳过的字节数。

Parameters:

n - 要有效跳过的字节数。

Returns:

跳过的实际字节数。

适用于