有什么方法可以确保Jersey的StreamingOutput的底层流被关闭?

时间:2016-05-03 07:38:51

标签: jersey response inputstream resource-cleanup

我正在使用REST API,我正在使用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();

据我所知;这里发生的是我从我的方法返回Response,然后泽西开始通过调用InputStream方法将OutputStream写入write(OutputStream os)。也就是说,在我的方法之后调用write(OutputStream os)

现在,如果出现问题,在泽西岛开始调用write(OutputStream os)之前会怎么样? InputStream永远不会被关闭。

我是否应该跟踪我移交给InputStream的所有Response个实例,然后尝试关闭它们,比如5分钟后确定一切都得到了很好的清理?

我不喜欢分发InputStream个实例的想法,顺便说一下,泽西岛无法知道如何关闭,也无法确保自己一切都得到清理。

0 个答案:

没有答案