首页 > 解决方案 > 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 框架。

有人知道吗?

标签: javaandroidfileoutputstream

解决方案


我认为这将解决您的问题:

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);

推荐阅读