我正在读取从客户端浏览器输入的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);
}
我需要关闭上面的流吗?
请告知。
谢谢
答案 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块中初始化了流。