Java 多次使用InputStream

Java 多次使用InputStream,java,spring,vaadin,Java,Spring,Vaadin,我有一个视图,用户可以首先根据一些参数生成PDF,然后下载和/或通过邮件发送 现在,生成PDF文件的方法返回一个InputStream,然后将其存储为类的字段,如下所示: public class PDFWindow extends VerticalLayout { ... private InputStream pdfInputStream; ... private void createPDF() { this.pdfInputStream

我有一个视图,用户可以首先根据一些参数生成PDF,然后下载和/或通过邮件发送

现在,生成PDF文件的方法返回一个
InputStream
,然后将其存储为类的字段,如下所示:

public class PDFWindow extends VerticalLayout {
    ...
    private InputStream pdfInputStream;
    ...

    private void createPDF() {
        this.pdfInputStream = pdfCreator.createPDF();  
}
我的问题是,
pdfInputStream
在被
FileDownloader
使用后被关闭:

Button download = new Button("Download");
final FileDownloader fileDownloader = new FileDownloader(
            new StreamResource(() -> this.pdfInputStream, this.pdfFileName));
fileDownloader.extend(download);
或者我写的
SpringEmailService

SpringEmailService.send(
     "test@mail.com", recipients, this.subject.getValue(),
     this.message.getValue(),this.pdfInputStream,"test.pdf", "application/pdf");

有没有办法停止关闭
InputStream
,然后手动关闭,或者我应该寻找一种完全不同的方法?

只是不要将InputStream存储为字段

每次需要流时,请创建者创建流


如果太贵,则将生成的字节存储在内存中、文件中、数据库中或任何您想要的位置,并在需要时在这些字节/文件上创建流。

只是不要将InputStream存储为字段

每次需要流时,请创建者创建流


如果费用太高,则将生成的字节存储在内存中、文件中、数据库中或任何您想要的地方,并在需要时在这些字节/文件上创建流。

不要将InputStream存储为字段。每次需要流时,请创建者创建流。如果太贵,那么将生成的字节存储在内存中、文件中、数据库中或任何您想要的地方。非常感谢!我修改了它,将字节数组存储为一个字段,它工作得非常好。你可以发布一个答案,这样我就可以接受了吗?只是不要将InputStream存储为字段。每次需要流时,请创建者创建流。如果太贵,那么将生成的字节存储在内存中、文件中、数据库中或任何您想要的地方。非常感谢!我修改了它,将字节数组存储为一个字段,它工作得非常好。你能给我一个答复吗?这样我就可以接受了?