在此用例中是否需要关闭流?

时间:2020-03-10 06:06:14

标签: spring-boot

我正在读取从客户端浏览器输入的csv文件,并且代码在下面

@RequestMapping(value = "/file-upload", method = {RequestMethod.PUT, RequestMethod.POST}, consumes = 
       MediaType.APPLICATION_JSON_UTF8_VALUE, produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
@ResponseStatus(HttpStatus.OK)
public Set<SessionBulkUploadLine> fileUpload(@RequestBody final FileUploadInfo fileUploadInfo) {
 final CsvFileParser parser = new CsvFileParser();
 try (final ByteArrayInputStream stream = new ByteArrayInputStream(settings.getBytes())) {
      final Spreadsheet sheet = parser.parse(stream, true);
 }

我需要关闭上面的流吗?

请告知。

谢谢

1 个答案:

答案 0 :(得分:1)

1)不,您不需要通过显式调用.close()来关闭它,因为它会在try catch完成执行后自动关闭。 (您正在使用带有资源的try-catch)

2)如果您使用带有资源的try-catch,则在使用完所有流后应将其关闭,以便垃圾收集器可以将其从内存中删除。 (流通常会占用大量资源)

try{
  final ByteArrayInputStream stream = ... ;
  // logic here
}catch(Exception e)
{
  // print error
}finally{
  stream.close();
}

请注意,在 INSIDE try块中初始化了流。