树叶云鸿蒙OS教程:鸿蒙OS InputStream

InputStream

java.lang.Object

|—java.io.InputStream

public abstract class InputStream
extends Object
implements Closeable

这个抽象类是代表字节输入流的所有类的超类。

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

Since:

JDK1.0

构造函数摘要

构造函数描述
InputStream()

方法总结

修饰符和类型方法描述
intavailable()返回可以从此输入流中读取(或跳过)的字节数的估计值,而不会被下一次调用此输入流的方法阻塞。
voidclose()关闭此输入流并释放与该流关联的所有系统资源。
voidmark(int readlimit)标记此输入流中的当前位置。
booleanmarkSupported()测试此输入流是否支持 mark 和 reset 方法。
abstract intread()从输入流中读取数据的下一个字节。
intread(byte[] b)从输入流中读取一些字节并将它们存储到缓冲区数组 b.
intread(byte[] b, int off, int len)从输入流中读取最多 len 个字节的数据到一个字节数组中。
voidreset()将此流重新定位到最后一次在此输入流上调用标记方法时的位置。
longskip(long n)跳过并丢弃此输入流中的 n 字节数据。
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

构造函数详细信息

InputStream

public InputStream()

方法详情

read

public abstract int read() throws IOException

从输入流中读取数据的下一个字节。 值字节作为 int 返回,范围为 0 到 255。如果由于到达流的末尾而没有可用的字节,则返回值 -1。 此方法会一直阻塞,直到输入数据可用、检测到流结束或引发异常。

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

返回:

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

Throws:

Throw名称Throw描述
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[k-1] 中,而元素 b[k] 到 b[b.length-1] 不受影响。

InputStream 类的 read(b) 方法与以下效果相同:

 read(b, 0, b.length) 

参数:

参数名称参数描述
b读取数据的缓冲区。

返回:

读入缓冲区的总字节数,如果由于到达流的末尾而没有更多数据,则为 -1。

Throws:

Throw名称Throw描述
IOException如果由于文件结尾以外的任何原因无法读取第一个字节,如果输入流已关闭,或者发生其他一些 I/O 错误。
NullPointerException如果 b 为空。

read

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

从输入流中读取最多 len 个字节的数据到一个字节数组中。尝试读取多达 len 个字节,但可能会读取较小的字节数。实际读取的字节数以整数形式返回。

在输入数据可用、检测到文件结尾或引发异常之前,此方法会一直阻塞。

如果 len 为零,则不读取任何字节并返回 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。

Throws:

Throw名称Throw描述
IOException如果由于文件结尾以外的任何原因无法读取第一个字节,或者输入流已关闭,或者发生其他一些 I/O 错误。
NullPointerException如果 b 为空。
IndexOutOfBoundsException如果 off 为负数,len 为负数,或者 len 大于 b.length – off

skip

public long skip(long n) throws IOException

跳过并丢弃此输入流中的 n 字节数据。 由于各种原因,skip 方法最终可能会跳过一些较小的字节数,可能是 0。这可能是由许多条件中的任何一个引起的; 在跳过 n 个字节之前到达文件末尾只是一种可能性。 返回实际跳过的字节数。 如果 n 为负数,则 InputStream 类的 skip 方法始终返回 0,并且不跳过任何字节。 子类可能以不同方式处理负值。

此类的 skip 方法创建一个字节数组,然后重复读取它,直到读取 n 个字节或到达流的末尾。 鼓励子类提供此方法的更有效实现。 例如,实现可能取决于寻找的能力。

参数:

参数名称参数描述
n要跳过的字节数。

返回:

跳过的实际字节数。

Throws:

Throw名称Throw描述
IOException如果流不支持查找,或者发生其他一些 I/O 错误。

available

public int available() throws IOException

返回可以从此输入流中读取(或跳过)的字节数的估计值,而不会被下一次调用此输入流的方法阻塞。下一次调用可能是同一个线程或另一个线程。单次读取或跳过这么多字节不会阻塞,但可能会读取或跳过更少的字节。

请注意,虽然 InputStream 的某些实现会返回流中的字节总数,但许多不会。使用此方法的返回值来分配旨在保存此流中所有数据的缓冲区是不正确的。

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

InputStream 类的可用方法总是返回 0。

这个方法应该被子类覆盖。

返回:

可以在没有阻塞的情况下从此输入流中读取(或跳过)的字节数的估计值,或者当它到达输入流的末尾时为 0。

Throws:

Throw名称Throw描述
IOException如果发生 I/O 错误。

close

public void close() throws IOException

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

InputStream 的 close 方法什么也不做。

指定者:

在接口 AutoCloseable 中关闭

指定者:

在接口Closeable中关闭

Throws:

Throw名称Throw描述
IOException如果发生 I/O 错误。

mark

public void mark(int readlimit)

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

readlimit 参数告诉此输入流允许在标记位置无效之前读取那么多字节。

mark 的一般约定是,如果方法 markSupported 返回 true,则流以某种方式记住调用 mark 之后读取的所有字节,并准备好在调用方法 reset 时再次提供这些相同的字节。 但是,如果在调用 reset 之前从流中读取了超过 readlimit 个字节,则流根本不需要记住任何数据。

标记关闭的流不应对流产生任何影响。

InputStream 的mark 方法什么都不做。

参数:

参数名称参数描述
readlimit在标记位置无效之前可以读取的最大字节数。

reset

public void reset() throws IOException

将此流重新定位到最后一次在此输入流上调用标记方法时的位置。

重置的一般合约是:

  • 如果方法 markSupported 返回 true,则:
    • 如果自创建流以来尚未调用方法标记,或者自上次调用标记以来从流中读取的字节数大于上次调用时标记的参数,则可能会引发 IOException。
    • 如果没有抛出这样的 IOException,则流将被重置为这样的状态,即自最近一次调用 mark(或自文件开始,如果尚未调用 mark)读取的所有字节将被重新提供给后续 read 方法的调用者,后跟任何字节,否则在调用重置时将成为下一个输入数据。
  • 如果方法 markSupported 返回 false,则:
    • 对 reset 的调用可能会引发 IOException。
    • 如果未抛出 IOException,则流将重置为固定状态,该状态取决于输入流的特定类型及其创建方式。 将提供给 read 方法的后续调用者的字节取决于输入流的特定类型。

InputStream 类的方法 reset 除了抛出一个 IOException 之外什么都不做。

Throws:

Throw名称Throw描述
IOException如果此流尚未标记或标记已失效。

markSupported

public boolean markSupported()

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

返回:

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

文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/162160.html<

(0)
运维的头像运维
上一篇2025-03-18 13:39
下一篇 2025-03-18 13:41

相关推荐

  • 个人主题怎么制作?

    制作个人主题是一个将个人风格、兴趣或专业领域转化为视觉化或结构化内容的过程,无论是用于个人博客、作品集、社交媒体账号还是品牌形象,核心都是围绕“个人特色”展开,以下从定位、内容规划、视觉设计、技术实现四个维度,详细拆解制作个人主题的完整流程,明确主题定位:找到个人特色的核心主题定位是所有工作的起点,需要先回答……

    2025-11-20
    0
  • 社群营销管理关键是什么?

    社群营销的核心在于通过建立有温度、有价值、有归属感的社群,实现用户留存、转化和品牌传播,其管理需贯穿“目标定位-内容运营-用户互动-数据驱动-风险控制”全流程,以下从五个维度展开详细说明:明确社群定位与目标社群管理的首要任务是精准定位,需明确社群的核心价值(如行业交流、产品使用指导、兴趣分享等)、目标用户画像……

    2025-11-20
    0
  • 香港公司网站备案需要什么材料?

    香港公司进行网站备案是一个涉及多部门协调、流程相对严谨的过程,尤其需兼顾中国内地与香港两地的监管要求,由于香港公司注册地与中国内地不同,其网站若主要服务内地用户或使用内地服务器,需根据服务器位置、网站内容性质等,选择对应的备案路径(如工信部ICP备案或公安备案),以下从备案主体资格、流程步骤、材料准备、注意事项……

    2025-11-20
    0
  • 如何企业上云推广

    企业上云已成为数字化转型的核心战略,但推广过程中需结合行业特性、企业痛点与市场需求,构建系统性、多维度的推广体系,以下从市场定位、策略设计、执行落地及效果优化四个维度,详细拆解企业上云推广的实践路径,精准定位:明确目标企业与核心价值企业上云并非“一刀切”的方案,需先锁定目标客户群体,提炼差异化价值主张,客户分层……

    2025-11-20
    0
  • PS设计搜索框的实用技巧有哪些?

    在PS中设计一个美观且功能性的搜索框需要结合创意构思、视觉设计和用户体验考量,以下从设计思路、制作步骤、细节优化及交互预览等方面详细说明,帮助打造符合需求的搜索框,设计前的规划明确使用场景:根据网站或APP的整体风格确定搜索框的调性,例如极简风适合细线条和纯色,科技感适合渐变和发光效果,电商类则可能需要突出搜索……

    2025-11-20
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注