树叶云鸿蒙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

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

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