Android OkHttp InputStream java.IOException.closed 安卓OkHttp输入流java.IOException关闭

7
我使用一个 OkHttpClient 从服务器上下载一个数据库并将其复制到我的Android应用程序中,请求很好,我得到了正确的内容。
然而,当我尝试将我的 byteStream 写入文件时,我会收到一个 java.IOException.closed 的错误。你知道我做错了什么吗?
Response httpResponse = webApiClient.execute(
    new WebApiRequest(WebApiMethod.DB_DOWNLOAD), context);

if (httpResponse.code() == 200)
{
    try 
    {
        InputStream inputStream = httpResponse.body().byteStream();
        File databasePath = context.getDatabasePath(Constant.DATABASE_NAME);
        FileOutputStream output = new FileOutputStream(databasePath);
        int bufferSize = 1024;
        byte[] buffer = new byte[bufferSize];
        int len;
        while ((len = inputStream.read(buffer)) != -1)
        {
            output.write(buffer, 0, len);
        }
        success = true;
    }
    catch (Exception exc)
    {
        Utils.DisplayException(exc, context);
    }
}

我也尝试使用 BufferedSink 读取我的 ByteStream,但结果仍然相同。

BufferedSink sink = Okio.buffer(Okio.sink(databasePath));
sink.writeAll(httpResponse.body().source());
sink.close();

堆栈跟踪:

java.io.IOException: closed
    at okio.RealBufferedSource$1.read(RealBufferedSource.java:367)
    at java.io.InputStream.read(InputStream.java:162)
    at com.org.dbconn.LoginActivity$DbDownloadTask.doInBackground(LoginActivity.java:475)
    at com.org.dbconn.LoginActivity$DbDownloadTask.doInBackground(LoginActivity.java:436)
    at android.os.AsyncTask$2.call(AsyncTask.java:288)
    at java.util.concurrent.FutureTask.run(FutureTask.java:237)
    at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:231)
    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:818)

1
请您能否提供完整的堆栈跟踪信息? - apmartin1991
1
你是否使用了任何可能会关闭流的拦截器? - Jesse Wilson
1个回答

9

我找到了流被关闭的原因。在某些测试中,我使用System.out.println来检查输出字符串的内容,但当你读取或打印输出时,它会自动关闭流,这就是为什么我会出现错误的原因。

总之,有一件事情需要记住:读取或打印输出流将会关闭它。


1
你刚刚救了我的一天,谢谢。 - theapache64

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接