文件上传端点需要关闭InputStream?
File upload endpoint need to close InputStream?
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Path("/upload")
public String upload(@FormDataParam("file") InputStream inputStream) {
...
inputStream.close(); // necessary?
}
对于接受文件输入的 API 端点,我们需要手动关闭 InputStream
还是框架会为我们完成?
我检查了 Jersey docs 但找不到任何相关信息。
正在寻找可靠的来源或某种方法来验证它。
您有责任关闭 InputStream。
泽西岛本质上不知道何时关闭您的流。
1) 使用 InputStream 后,您可以假设关闭它是安全的。
2) 您还可以向 Jersey ClosableService 注册 InputStream,根据其文档,它将为您关闭 InputStream。 ClosableService
希望对您有所帮助。
我只是想知道同样的事情,并在调试器中进行了尝试。 Jersey 不会 为您关闭流。
我认为最优雅的方法是使用 try-with-resources,它可以从 Java 9 开始接受任意表达式并为你调用 close()
。
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Path("/upload")
public String upload(@FormDataParam("file") InputStream inputStream) {
...
try (inputStream) {
//...
} catch (IOException e) {
//...
}
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Path("/upload")
public String upload(@FormDataParam("file") InputStream inputStream) {
...
inputStream.close(); // necessary?
}
对于接受文件输入的 API 端点,我们需要手动关闭 InputStream
还是框架会为我们完成?
我检查了 Jersey docs 但找不到任何相关信息。
正在寻找可靠的来源或某种方法来验证它。
您有责任关闭 InputStream。
泽西岛本质上不知道何时关闭您的流。
1) 使用 InputStream 后,您可以假设关闭它是安全的。
2) 您还可以向 Jersey ClosableService 注册 InputStream,根据其文档,它将为您关闭 InputStream。 ClosableService
希望对您有所帮助。
我只是想知道同样的事情,并在调试器中进行了尝试。 Jersey 不会 为您关闭流。
我认为最优雅的方法是使用 try-with-resources,它可以从 Java 9 开始接受任意表达式并为你调用 close()
。
@POST
@Consumes(MediaType.MULTIPART_FORM_DATA)
@Path("/upload")
public String upload(@FormDataParam("file") InputStream inputStream) {
...
try (inputStream) {
//...
} catch (IOException e) {
//...
}