确保Jersey';s StreamingOutput关闭了吗?

确保Jersey';s StreamingOutput关闭了吗?,jersey,response,inputstream,resource-cleanup,Jersey,Response,Inputstream,Resource Cleanup,我正在开发一个RESTAPI,我正在为此使用Jersey。其中一个端点正在返回文件,我正在为此使用StreamingOut final InputStream is = getInputStreamFor(fileHandle); StreamingOutput so = new StreamingOutput() { @Override public void write(OutputStream os) throws IOException, WebApplic

我正在开发一个RESTAPI,我正在为此使用Jersey。其中一个端点正在返回文件,我正在为此使用
StreamingOut

final InputStream is = getInputStreamFor(fileHandle);           
StreamingOutput so = new StreamingOutput() {
  @Override
  public void write(OutputStream os) throws IOException, WebApplicationException {
    try {
      IOUtils.copy(is, os);    
      os.flush();
    } catch (Exception e) {
      throw e;
    } finally {
      is.close();
    }
  }
}

return Response
.ok(rs)
.build();
据我所知;这里发生的事情是,我从我的方法返回
响应
,然后Jersey通过调用
write(OutputStream os)
方法开始将
InputStream
写入
OutputStream
。也就是说,在我的方法之后调用
write(OutputStream os)

现在,如果Jersey在调用
write(OutputStream os)
之前出现问题怎么办?
InputStream
将永远不会关闭

我是否应该跟踪我交给
响应的所有
InputStream
实例,并在(比如)5分钟后尝试关闭它们,以确保一切都得到了很好的清理

我不喜欢分发
InputStream
实例的想法,顺便说一句,泽西不知道如何关闭这些实例,也无法确保自己将所有事情都清理干净