Java Android,从输入流创建文件挂起,同时循环
上面的代码应该从输入流创建一个pdf文件。但是,它卡在while循环中。它打印Java Android,从输入流创建文件挂起,同时循环,java,android,retrofit,fileoutputstream,Java,Android,Retrofit,Fileoutputstream,上面的代码应该从输入流创建一个pdf文件。但是,它卡在while循环中。它打印 try { Log.d("TEST", "start converting..."); File file = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "out.pdf"); file.createNewFile(); OutputStream
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();
}
一直如此。有什么想法吗?基于此javadoc for TypedInput: 以流形式读取字节。除非另有规定,否则本方法可以 只能叫一次。来电者有责任关闭电话 小溪 我猜每次调用in()都会创建一个新的InputStream。因此,您永远不会退出while循环,因为每次通过时都会有一个新的InputStream 相反,只需像这样调用()一次,看看是否可以解决问题:
looping
resp变量是什么类型?@DerGolem只是一个typo@user230137它的类型是Response,改型Response object在while中放入一条Log语句,它将输出读取的内容。知道它认为每次读取多少字节会很有用。@DerGolem不工作,因为读取类型为int
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();
}
}