将 Vaadin7 StreamResource 保存到文件

Save Vaadin7 StreamResource to file

我有一个 StreamResource class 的对象,里面有一些需要的内容。我确定此内容有效,我需要将其保存在本地以供进一步处理。这是代码片段:

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() 操作 returns 每次迭代中只有第一个字节块,甚至在 os.write.

之后调用 skip()

我应该如何从流中读取内容?

谢谢。

根据 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 上使用间接寻址,因为我猜你之前创建了那个对象。