java.io.IOException:意外的流结束

时间:2016-01-29 09:28:38

标签: java android httpurlconnection multipartform-data

使用httpurlconnection编写大型视频文件时出现问题。

java.io.IOException: unexpected end of stream on Connection{192.1.4.55, proxy=DIRECT@ hostAddress=192.1.4.55 cipherSuite=none protocol=http/1.1} (recycle count=0)
W/System.err:     at com.android.okhttp.internal.http.HttpConnection.readResponse(HttpConnection.java:210)W/System.err:     at com.android.okhttp.internal.http.HttpTransport.readResponseHeaders(HttpTransport.java:80)
W/System.err:     at com.android.okhttp.internal.http.HttpEngine.readNetworkResponse(HttpEngine.java:904)
W/System.err:     at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:788)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:443)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:388)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:501)

响应代码在这里

final InputStream is = connection.getInputStream();
            final ByteArrayOutputStream bytes = new ByteArrayOutputStream();
            final byte[] buffer = new byte[maxBufferSize];
            int bytesRead;
            while ((bytesRead = is.read(buffer, 0, 1024)) != -1) {
                bytes.write(buffer, 0, bytesRead);
            }
            log.log(INFO,
                    format("{0} took {4} ms", url,
                            (currentTimeMillis() - start)));
            String response = new String(bytes.toByteArray());

4 个答案:

答案 0 :(得分:2)

如果您使用的是OkHttpClient,请检查它,这里是参数retryOnConnectionFailure(false)。默认情况下它是false,你只需将其设为true,然后就会删除错误。希望因为我有同样的问题并解决它只是改变它。

OkHttpClient client = new OkHttpClient.Builder()
    .retryOnConnectionFailure(true)
    .build();

答案 1 :(得分:-3)

请使用BufferedInputStream和BufferedOutputStream来缓冲较大文件的数据

答案 2 :(得分:-3)

希望本准则能为您提供帮助。

BufferedReader br = null;
if (conn.getResponseCode() == 200) {
    Log.e("HTTP success code", "" + conn.getResponseCode());
    InputStream inputStream = conn.getInputStream();
    if (inputStream != null)
        br = new BufferedReader(new InputStreamReader(inputStream));
} else {
    Log.e("HTTP error code", "" + conn.getResponseCode());
    InputStream inputStream = conn.getErrorStream();
    if (inputStream != null)
        br = new BufferedReader(new InputStreamReader(inputStream));
} 
StringBuilder builder = new StringBuilder();
String output;
while ((output = br.readLine()) != null) {
    builder.append(output);
}
Log.e(reqTag + " Response :", builder.toString());
conn.disconnect();

答案 3 :(得分:-4)

有时可以忽略此异常,您可能需要重试 例如使用charles代理你的手机wifi,下载文件,查尔斯终止这个连接,你会收到同样的例外。