作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
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
一直以来。有什么想法吗?
最佳答案
基于 TypedInput 的 javadoc:
Read bytes as stream. Unless otherwise specified, this method may only be called once. It is the responsibility of the caller to close the stream.
我猜每次调用 in() 都会创建一个新的 InputStream。因此,您永远不会脱离 while 循环,因为每次通过时您都会有一个新的 InputStream。
相反,只需像这样调用 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();
}
}
关于java - Android,从输入流创建文件卡在while循环中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28462584/
我是一名优秀的程序员,十分优秀!