我正在使用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
个实例的想法,顺便说一下,泽西岛无法知道如何关闭,也无法确保自己一切都得到清理。