代码之家  ›  专栏  ›  技术社区  ›  Avery235

文件上载端点需要关闭InputStream吗?

  •  3
  • Avery235  · 技术社区  · 8 年前
    @POST
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    @Path("/upload")
    public String upload(@FormDataParam("file") InputStream inputStream) {
        ...
        inputStream.close(); // necessary?
    }
    

    对于接受文件输入的API端点,是否需要手动关闭 InputStream 还是框架为我们做了这件事?

    我已经查过了 Jersey docs 但找不到任何相关信息。

    寻找可靠的来源或某种方式来验证它。

    3 回复  |  直到 8 年前
        1
  •  0
  •   Hlib    8 年前

    关闭InputStream是您的责任。

    Jersey不知道何时关闭流。

        2
  •  0
  •   Toby    8 年前

    1) 在您使用了InputStream之后,您可以假设关闭它是安全的。

    2) 您还可以向Jersey ClosableService注册InputStream,根据其文档,它将为您关闭InputStream。 ClosableService

    我希望这能有所帮助。

        3
  •  0
  •   Tommy    7 年前

    我只是想知道同样的事情,并在调试器中进行了尝试。运动衫 没有 为你关闭小溪。

    我认为最优雅的方式是使用try with resources,它可以接受自Java9和调用以来的任意表达式 close() 为你。

    @POST
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    @Path("/upload")
    public String upload(@FormDataParam("file") InputStream inputStream) {
    ...
    try (inputStream) {
       //...
    } catch (IOException e) {
       //...
    }