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();
}
}