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();
相关推荐
2501_9327502611 小时前
Android 跑马灯:从一行 XML 到自定义控件
android
鹿角片ljp18 小时前
LeetCode 64:最小路径和复盘|二维 DP 与 ACM 模式完整写法
java·数据结构·算法
泡海椒19 小时前
PDF 表格样式优化:jquick-pdf 边框、圆角、背景色
java·开发语言·pdf
景熙552320 小时前
15.Java 8 Stream 流入门到实战
java·开发语言·数据结构
wno70420 小时前
Spring Security权限控制
java·python·spring
杨运交21 小时前
[071][验证码模块]基于Spring拦截器的验证码认证设计思想
java·后端·spring
Geek-Chow21 小时前
CountDownLatch in Java
java
SL_staff1 天前
从RBAC到场景化授权:《无忧·企业文档》三级权限模型的技术实践解析
java·开源·产品
传奇开心果编程1 天前
【springboot基础语法学与练】第 1 课:从零开始
java·spring boot·后端·学习