关于OKhttp的异常:java.net.ProtocolException: expected 6137 bytes but received 7081

应用场景: 录音后把音频文件上传至服务器出现了以下异常:

java.net.ProtocolException: expected 6137 bytes but received 7081
at okhttp3.internal.http.Http1xStream$FixedLengthSink.write(Http1xStream.java:279)
at okio.RealBufferedSink.flush(RealBufferedSink.java:216)
at okio.ForwardingSink.flush(ForwardingSink.java:39)
at okio.RealBufferedSink.flush(RealBufferedSink.java:218)
at com.qlk.test.http.request.CountingRequestBody.writeTo(CountingRequestBody.java:63)
at okhttp3.internal.http.CallServerInterceptor.intercept(CallServerInterceptor.java:47)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.connection.ConnectInterceptor.intercept(ConnectInterceptor.java:45)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
at okhttp3.internal.cache.CacheInterceptor.intercept(CacheInterceptor.java:109)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
at okhttp3.internal.http.BridgeInterceptor.intercept(BridgeInterceptor.java:93)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RetryAndFollowUpInterceptor.intercept(RetryAndFollowUpInterceptor.java:124)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
at com.test.log.SimpleInterceptor.intercept(SimpleInterceptor.java:34)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:92)
at okhttp3.internal.http.RealInterceptorChain.proceed(RealInterceptorChain.java:67)
at okhttp3.RealCall.getResponseWithInterceptorChain(RealCall.java:170)
at okhttp3.RealCall.access$100(RealCall.java:33)
at okhttp3.RealCall$AsyncCall.execute(RealCall.java:120)
at okhttp3.internal.NamedRunnable.run(NamedRunnable.java:32)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)

具体原因没有分析出来,只是有个猜测:

是文件没有写入完毕就开始上传导致的这种情况,造成这个原因的环境比较复杂,所以解决方式也得具体分析

(2017/7/19)今天好像发现原因了:应该是上传文件的时候运行内存比较小的时候会出现这种情况,上传文件大小 大于可使用的运行内存应该会出现

(2017/12/29) 今天终于找到了原因,也算是为持续一年多的bug(也是迄今为止,历时最久的)。现在解释如下:
    场景描述:公司自己搭建的聊天系统,然后发送语音消息的时候需要上传mp3格式的文件,要求我们边录边转。
    问题原因:转码的操作放在子线程中进行操作,当用户发出录制成功的命令时候,我们立刻进行文件上传,但是转码的线程收到后,还要进行剩余操作。
    比如:把MP3尾部信息写入进去,这样就造成了上传的文件和最终的文件大小不一致的情况,从而引起了这个问题的发生。
    结后语:看来当初问题出现的时候我的猜测还是挺准的๑乛◡乛๑
评论 29
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值