Android,从输入流创建文件挂在循环内部


try {
    Log.d("TEST", "start converting...");
    File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "out.pdf");
    file.createNewFile();
    OutputStream out = new FileOutputStream(file);
    int read = 0;
    byte[] bytes = new byte[1024];
    while ((read = resp.getBody().in().read(bytes)) != -1) {
        out.write(bytes, 0, read);
        Log.d("TEST", "looping");
    }
    Log.d("TEST", "finish converting");
} catch (IOException e) {
    e.printStackTrace();
}

上面的代码应该从输入流创建一个 pdf 文件。但是,它卡在 while 循环中。它打印

looping

一直以来。任何想法有什么问题?

基于这个 JavaScript for TypedInput:

将字节作为流读取。除非另有说明,否则此方法可以 只叫一次。调用方有责任关闭 流。

我猜每次调用 in(( 都会创建一个新的输入流。 因此,您永远不会退出while循环,因为每次都会有一个新的输入流。

相反,只需像这样调用 in(( 一次,看看是否可以解决问题:

    InputStream in = null;
    try {
        Log.d("TEST", "start converting...");
        File file = new File(
                Environment
                        .getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS),
                "out.pdf");
        file.createNewFile();
        OutputStream out = new FileOutputStream(file);
        int read = 0;
        byte[] bytes = new byte[1024];
         in = resp.getBody().in();
        while ((read = in.read(bytes)) != -1) {
            out.write(bytes, 0, read);
            Log.d("TEST", "looping");
        }
        Log.d("TEST", "finish converting");
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (in != null) {
             in.close();
        }
    }

最新更新