场景:在内存中读取压缩文件时,使用IoUtil.readUtf8Lines方法,因文件过大,出现内存溢出的异常。因此需要对代码进行修改,分行读取,避免内存溢出。
修改前代码:
@Cleanup
ZipInputStream zipInputStream = new ZipInputStream(zipFile.getInputStream());
zipInputStream.getNextEntry(); // 压缩文件中只有一个类目
List<String> lines = Lists.newLinkedList();
lines = IoUtil.readUtf8Lines(zipInputStream,lines);
修改后代码:
@Cleanup
ZipInputStream zipInputStream = new ZipInputStream(zipFile.getInputStream());
zipInputStream.getNextEntry(); // 压缩文件中只有一个类目
List<String> lines = Lists.newLinkedList();
try (BufferedReader reader = IoUtil.getReader(zipInputStream, "UTF-8")) {
String line;
while ((line = reader.readLine()) != null) {
lines.add(line);
}
zipInputStream.closeEntry();
}