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();
相关推荐
程序员黑豆5 小时前
Java 注释详解:单行、多行与文档注释的完整指南
java·前端·ai编程
hey_sml6 小时前
JAVA每日一学---CompletableFuture中thenApply与thenCompose区别详解
java·开发语言
Doraemomo6 小时前
数据结构-环形链表
java·数据结构·链表
萧瑟余晖7 小时前
Java深入解析篇十七之SpringCloud
java·开发语言
是未才8 小时前
从输入 URL 到页面返回:DNS、路由、TLS 与 HTTP 完整链路
java·后端·计算机网络
ttod_qzstudio8 小时前
Java 常用语法极简通关(五):类与对象——字段、方法、构造器、this 与 static
java·开发语言·python
一笑的小酒馆9 小时前
Android中WebRTC通信
android
萧瑟余晖9 小时前
Java深入解析篇十七之Spring Security
java·开发语言·spring
不老刘10 小时前
【Java入门】Java服务部署方式全景对比:从java -jar到K8s
java·kubernetes·jar
离陌在学C#12 小时前
C# 重载与重写:深入理解面向对象编程的核心概念
java·c#