我有一个StreamResource类的对象,里面有一些需要的内容。我确定这个内容是有效的,我需要在本地保存以便进一步处理。以下是代码段:
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();
}
在这里我加入无限循环。 Break永远不会出现,并且所需位置的文件变得非常大,因为它应该实际上。在调试器下,我看到read()操作在每次迭代中只返回第一块字节,甚至在os.write后调用skip()。
我应该如何阅读流中的内容?
感谢。
答案 0 :(得分:1)
根据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上使用间接,因为我猜你以前创建了那个对象。