gpt4 book ai didi

Java Try-with-resource 在 Map 中存储输入流

转载 作者:行者123 更新时间:2023-12-03 22:28:45 25 4
gpt4 key购买 nike

在我的 API (Spring boot) 中,我有一个端点,用户可以在其中一次上传多个文件。端点将 MultipartFile 作为输入列表.

不想直接传这个MultipartFile直接反对该服务,所以我循环遍历每个 MultipartFile并创建一个简单的映射来存储文件名及其 InputStream .

像这样:

for (MultipartFile file : files) {       
try (InputStream is = multipartFile.getInputStream()) {
filesMap.put(file.getOriginalFilename(), is);
}
}
service.uploadFiles(filesMap)

我对 Java 流和流关闭的理解非常有限。
我以为 try-with-resources自动关闭 InputStream一旦代码到达 try 块的末尾。

在上面的代码中, multipartFile.getInputStream()被关闭?

我将流存储在映射中的事实会导致内存泄漏吗?

最佳答案

流在执行到达 try 的右括号后立即关闭堵塞。
可以 Collection InputStream关闭后的任何地方。
但请注意,您 什么都看不懂 关闭此流后。

感谢评论

另外,请注意某些流在 close() 上有特殊行为。它总是取决于 Stream实现。
例如:

  • 如果您尝试从关闭的 FileInputStream 中读取你会得到java.io.IOException: Stream Closed
  • 如果您尝试从关闭的 ByteArrayInputStream 中读取没关系,因为它很特别close()实现:public void close() throws IOException {}
  • 关于Java Try-with-resource 在 Map 中存储输入流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38118660/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com