[英]InputStream closes and sonar issues
我有以下代码打开一个包含几个文件的zip文件,并从每个文件中提取信息:
public static void unzipFile(InputStream zippedFile) throws IOException {
try (ZipInputStream zipInputStream = new ZipInputStream(zippedFile)) {
for (ZipEntry zipEntry = zipInputStream.getNextEntry(); zipEntry != null; zipEntry = zipInputStream.getNextEntry()) {
BufferedReader reader = new BufferedReader(new InputStreamReader(new BoundedInputStream(zipInputStream, 1024)));
//Extract info procedure...
}
}
}
总而言之,我从zip中选择每个文件,并使用BufferedReader
打开它以从中读取信息。 我还使用BoundedInputStream
( org.apache.commons.io.input.BoundedInputStream
)来限制缓冲区大小并避免文件上多余的BoundedInputStream
。
它可以按预期工作,但是我在Sonar上收到此警告:
Use try-with-resources or close this "BufferedReader" in a "finally" clause.
我只是无法关闭(或使用try-with-resources ,就像我在方法开始时所做的那样)创建的BufferedReaders-如果我调用close方法,则ZipInputStream
将关闭。 而且ZipInputStream
已经在try-with-resources下 ...
该声纳通知被标记为严重,但我相信这是一个误报。 我想知道您是否可以向我澄清-我是否正确,还是应该以其他方式处理? 我不想在代码中留下资源泄漏,因为此方法将被调用多次,泄漏可能会造成严重的损害。
感谢这里的答案,我可以这样解决我的问题:
BoundedInputStream boundedInputStream = new BoundedInputStream(zipInputStream, MAX_LINE_SIZE_BYTES);
boundedInputStream.setPropagateClose(false);
try(BufferedReader reader = new BufferedReader(new InputStreamReader(boundedInputStream))) { ...
使用boundedInputStream.setPropagateClose(false);
我可以关闭BufferedReader
而不关闭zipInputStream。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.