Java 是否 InputSream.read(byte[] b, int offset, int length) 等待指定的全部字节数

标签 java android io inputstream

如果我这样做,inStream.read(buffer, 0, 65); Java 会等待所有 65 个字节,还是会等待一定时间,然后尽可能地填充缓冲区。

最佳答案

InputStream.read(byte[] b, int off, int len)将读取字节到给定的 byte[] 中,直到 len,并返回实际读取的字节数,如果结束则返回 -1遇到流。它必须尝试读取至少一个字节(除非这样做,否则会阻塞),除非遇到流末尾,将 0 作为 len 参数的参数给出,或者抛出异常。

在读取 len 个字节之前调用是否阻塞是一个实现细节,特别是 java.io.InputStream 中提供的默认实现将阻塞直到 len 字节被读取,遇到流的末尾,或者抛出异常,但是实现可以立即立即返回可用字节(只要至少有一个字节要读取)并且仍然满足方法的契约。

总而言之,您应该始终检查返回值以了解实际从流中读取了多少字节。

关于Java 是否 InputSream.read(byte[] b, int offset, int length) 等待指定的全部字节数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18597244/

相关文章:

java - Spring Boot 安全性 - 如果缺少授权 header ,则使用 Cookie 中的 token

java - Android 异常(不受信任的服务器证书): https XML request with server authentication

android - Android 应用程序和服务器的 Google+ API 登录

android - Flutter Dismissible 未从树中移除

io - 启动 FPGA 编程

java - 如何确定字符串是否包含非字母数字字符?

java - 为什么 "int/boolean/..."是没有 "behavior"的主要类型,其中类型是 "behavior specification"

android - 自定义 ListView 滚动卡顿

Go 支持 Scatter-Gather IO 操作

c# - 从文件中读取速度不够快,我该如何加快速度?