java.lang.ArrayIndexOutOfBoundsException:大小=2048偏移量=0字节数=-1

java.lang.ArrayIndexOutOfBoundsException:大小=2048偏移量=0字节数=-1,java,kotlin,request,multipart,Java,Kotlin,Request,Multipart,为什么我将以writeTo函数的形式获取此异常 2019-07-02 12:17:03.525 13663-14248/com.zoinla.pegasus_工作 E/AndroidRuntime:致命异常:OkHttp调度程序 进程:com.xxx,PID:13663 java.lang.ArrayIndexOutOfBoundsException:大小=2048偏移量=0字节数=-1 在okio.Util.checkOffsetAndCountUtil.java:30 在okio.Buffe

为什么我将以writeTo函数的形式获取此异常

2019-07-02 12:17:03.525 13663-14248/com.zoinla.pegasus_工作 E/AndroidRuntime:致命异常:OkHttp调度程序 进程:com.xxx,PID:13663 java.lang.ArrayIndexOutOfBoundsException:大小=2048偏移量=0字节数=-1 在okio.Util.checkOffsetAndCountUtil.java:30 在okio.Buffer.writeBuffer.java:1096 在okio.Buffer.writeBuffer.java:54 在com.xxx.ProgressRequestBody.writeToProgressRequestBody.kt:33 在okhttp3.MultipartBody.writeOrCountBytesMultipartBody.java:173 在okhttp3.MultipartBody.writeToMultipartBody.java:114 在okhttp3.logging.HttpLoggingInterceptor.InterceptpLoggingInterceptor.java:202

ProgressRequestBody

它指向这条线

sink.write(buffer, 0, read)

是,当read==-1时会发生这种情况。使用前应先进行测试:

        do {
            read = `in`.read(buffer)
            handler.post(ProgressUpdater(uploaded, fileLength!!))

            if (read == -1) {
                break
            }

            uploaded += read.toLong()
            sink.write(buffer, 0, read)

        } while (true)
或许:

        do {
            read = `in`.read(buffer)

            if (read == -1) {
                break
            }

            uploaded += read.toLong()
            sink.write(buffer, 0, read)
            handler.post(ProgressUpdater(uploaded, fileLength!!))

        } while (true)
        do {
            read = `in`.read(buffer)

            if (read == -1) {
                break
            }

            uploaded += read.toLong()
            sink.write(buffer, 0, read)
            handler.post(ProgressUpdater(uploaded, fileLength!!))

        } while (true)