web-dev-qa-db-ja.com

java.io.IOException:予期しないストリームの終わり

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());
13
JosephM

OkHttpClientを使用しているかどうかを確認してください。ここにパラメーターretryOnConnectionFailure(false)があります。デフォルトではfalseですが、trueにするとエラーが削除されます。うまくいけば、私は同じ問題を抱えており、解決するだけでそれを変更できます。

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