我在其中有一个StreamResource类的对象w/一些需要的内容。我确信这个内容是有效的,我需要在本地保存它以供进一步处理。下面是代码片段:
OutputStream os = new FileOutputStream(filePath, false);
byte[] buffer = new byte[1024];
int bytesRead;
//read from is to buffer
try {
while(true)
{
bytesRead = resource.getStream().getStream().read(buffer);
if(bytesRead == -1)
break;
os.write(buffer, 0, bytesRead);
resource.getStream().getStream().skip(bytesRead);
}
os.flush();
os.close();
} catch (IOException e) {
e.printStackTrace();
}在这里,我加入了无尽的循环。中断永远不会被锁定,文件在需要的位置会变得很大,因为它实际上应该如此。在调试器下,我看到read()操作只返回每次迭代中的第一个字节块,甚至w/ skip()调用后的os.write。
我应该如何从流中读取内容?
谢谢。
发布于 2016-05-24 14:18:49
根据StreamResource的源代码,每个调用都会创建一个新的DownloadStream。您应该只调用它一次,类似于下面的片段:
OutputStream os = new FileOutputStream(filePath, false);
byte[] buffer = new byte[1024];
int bytesRead;
//read from is to buffer
try {
DownloadStream stream = resource.getStream();
while(true)
{
bytesRead = stream.getStream().read(buffer);
if(bytesRead == -1)
break;
os.write(buffer, 0, bytesRead);
}
os.flush();
os.close();
} catch (IOException e) {
e.printStackTrace();
}这样,流就不会在每次迭代中从一开始就被读取。但是,我仍然不明白为什么在StreamResource上使用间接性,因为我猜您以前创建过这个对象。
https://stackoverflow.com/questions/37414072
复制相似问题