Android 开发问题:java.lang.NoSuchMethodError:No virtual method readAllBytes()

java 复制代码
byte[] bytes;

try {
    bytes = inputStream.readAllBytes();
} catch (IOException e) {
    e.printStackTrace();

    Toast.makeText(this, "文件读取失败", Toast.LENGTH_SHORT).show();

    return;
}
  • 在 Android 开发中,执行上述代码,读取文件内容,出现如下错误信息

    java.lang.NoSuchMethodError:No virtual method readAllBytes()[B in class Ljava/io/InputStream; or its super classes (declaration of 'java.io.InputStream' appears in /apex/com.android.runtime/javalib/core-oj.jar)

问题原因
  1. InputStream 的 readAllBytes 方法是 Java 9 引入的,但直到 Android API 30(Android 11)才被加入 Android SDK

  2. 如果 minSdkVersion 低于 30,在低版本设备上运行时调用 readAllBytes 方法就会抛出 NoSuchMethodError 异常

处理策略
  • 不使用 readAllBytes 方法,改用兼容所有 Android 版本的方式,使用 ByteArrayOutputStream 手动读取
java 复制代码
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int nRead;
byte[] data = new byte[1024];
try {
    while ((nRead = inputStream.read(data, 0, data.length)) != -1) {
        buffer.write(data, 0, nRead);
    }
} catch (IOException e) {
    e.printStackTrace();

    Toast.makeText(this, "PDF 文件读取失败", Toast.LENGTH_SHORT).show();

    return;
}

byte[] bytes = buffer.toByteArray();
相关推荐
艾伦_耶格宇13 小时前
【kubernetes - 1.28版本】-11 K8S核心组件
java·容器·kubernetes
2301_7807896613 小时前
深度伪造即服务:新型网络诈骗的“完美面具”与识别之道
java·网络·ddos
LHICOD13 小时前
Linux-2
java·linux·后端·jar·vmware·svm·vm
香蕉大香蕉(06敬畏市场)13 小时前
MySQL 单点详解(03)
java·数据库·mysql·面试·八股·大厂实习
呆呆敲代码的小Y14 小时前
【实战精选面试题】C# 面试题详细解答,按难易程度排序
android·java·游戏·c#·游戏开发·unity面试题·c#面试题
水无痕simon14 小时前
3、工程重构
java·spring cloud·重构
阿里云基础软件14 小时前
Agent 任务提速 10.71%,内存占用降低 21.60%|Alibaba Cloud Linux 4 重大发布
java·linux·人工智能·操作系统·agent
Wang's Blog15 小时前
Java 项目实战: 交友项目 - 项目:需求分析与滑动数据设计
java·开发语言·交友
前端 贾公子15 小时前
第 5 章:Codex 从可运行程序到可交付工具
java·前端·数据库
CoderYanger15 小时前
Java EE 进阶:5. Spring IoC&DI(第三弹):Spring DI
java·开发语言·spring boot·spring·面试·java-ee·mvc