我面临一个奇怪的问题,我无法调试它.我已经实现了上传数据流的逻辑,并且使用了Volley,我在HurlStack中定制了一点逻辑,addBodyIfExists api,因此可以处理“application / octet-stream”类型的主体.
我的逻辑是将进度发布给用户,以便可以更新UI以指示用户在上传中的进度,低于我的逻辑.
int toRead = length; // File length
byte[] data = new byte[4096];
connection.setDoOutput(true);
if(length != -1) {
connection.setFixedLengthStreamingMode(length);
} else {
connection.setChunkedStreamingMode(4096);
}
OutputStream os;
int i;
int count;
os = connection.getOutputStream();
int progress= 0;
try {
for(i = 0; (count= is.read(data)) > 0; ++i) { // is, is not null and contains a valid input stream
os.write(data, 0, count); // at this line am getting unexpected end of stream
progress+= count;
if(i % 20 == 0) {
rs.deliverProgress(progress, 0L);
progress= 0;
}
}
os.flush();
} finally {
if(is != null) {
is.close();
}
if(os != null) {
os.close();
}
}
在执行上面的代码时我得到了这个,虽然我已经验证,输出流不是null,输入流也没有,它在读取循环本身的第一次迭代中失败,我看到它已读取4096字节,然后尝试写入相同的内容.
java.net.ProtocolException: unexpected end of stream
at com.android.okhttp.internal.http.HttpConnection$FixedLengthSink.close(HttpConnection.java:326)
at com.android.okio.RealBufferedSink.close(RealBufferedSink.java:174)
at com.android.okio.RealBufferedSink$1.close(RealBufferedSink.java:142)
任何有关上述调试的帮助都将受到高度赞赏.