java - Android 9.0 中的 ArrayIndexOutOfBoundsException
问题描述
我只有在 Android 9.0 的生产中遇到奇怪的问题,生产中的应用程序很长时间,这个问题从 Android 9.0 开始
进程:com.ae.paris10,PID:18804 java.lang.ArrayIndexOutOfBoundsException:长度=984;区域开始=0; 在 java.io.FileOutputStream.write(FileOutputStream.java:186) 的 libcore.io.IoBridge.write(IoBridge.java:487)
的 java.util.Arrays.checkOffsetAndCount(Arrays.java:1719)的regionLength=1024
private void copyStyleWithNewTilesPath() throws IOException {
InputStream myinput = getContext()
.getAssets().open("styleParis.json");
String outfilename = "/data/data/" + Config.APPLICATION_ID + "/databases/styleParis.json";
OutputStream myoutput = new FileOutputStream(outfilename);
byte[] buffer = new byte[1024];
int length;
while ((length = myinput.read(buffer)) > 0) {
String str = new String(buffer, "UTF-8");
if (str.contains("file://mnt/obb/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/{z}/{x}/{y}.pbf")) {
buffer = str.replace("file://mnt/obb/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/{z}/{x}/{y}.pbf", "file://" + obbPath + "/{z}/{x}/{y}.pbf").getBytes("UTF-8");
}
myoutput.write(buffer, 0, length); <<--- EXCEPTION HERE <<-----------
}
//Close the streams
myoutput.flush();
myoutput.close();
myinput.close();
}
我真的不明白会发生什么,因为 in FileOutputStream 是 Java 和 Android 框架。
有人知道吗?
解决方案
我认为这将解决您的问题:
if (str.contains("file://mnt/obb/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/{z}/{x}/{y}.pbf"))
myoutput.write(str.replace("file://mnt/obb/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/{z}/{x}/{y}.pbf", "file://" + obbPath + "/{z}/{x}/{y}.pbf").getBytes("UTF-8"));
else
myoutput.write(buffer, 0, length);
推荐阅读
- arrays - 从子视图复制对象然后放置对象
- python - 用于文件读取的生成器函数将对象类型作为常规函数返回
- sql - SQL - 获取“X”连续值的总和,其中 X 是另一行中的整数(带类别)
- python - 在 PyCharm 中更改 Python 解释器
- sql - 如何在 Postgres 中使用模式匹配
- c# - Cshtml在标题标签内插入空格
- azure - Microsoft Graph Explorer 修改权限
- c# - 在 Solidworks 零件中查找孔
- coldfusion - 结构上的参数非可选分号
- vue.js - Vuejs - 本地链接有效,但部署链接后出现错误 404 - 找不到文件或目录