我尝试对一个大的XML文件(100MB到500MB)进行gzip压缩。我创建了一个名为Zip的方法来完成这个任务。问题是,它花费的时间太长了。对于200MB的文件,需要1.2秒的时间。我需要将时间减少到100毫秒,以处理100MB的XML文件。
我通过在一定程度上牺牲压缩比例来缩短时间。我也尝试了其他算法,如Snappy、Lz4,但提升不大,并且它们的压缩效果较差。据我所知,gzipOutputStream.write() 占用了85%的时间。那么,我该如何优化这一步骤,以获得更好的性能而不会过多牺牲压缩比例呢?
public static String zip(final String str) {
if ((str == null) || (str.length() == 0)) {
throw new IllegalArgumentException("Cannot zip null or empty string");
}
try (ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(str.length())) {
try (GZIPOutputStream gzipOutputStream = new GZIPOutputStream(byteArrayOutputStream){{def.setLevel(Deflater.BEST_SPEED );}};) {
gzipOutputStream.write(str.getBytes(StandardCharsets.UTF_8));
}
T5 = System.currentTimeMillis();
byte[] bytes=byteArrayOutputStream.toByteArray();
T3 = System.currentTimeMillis();
String zipped_text=DatatypeConverter.printBase64Binary(bytes);
T4 = System.currentTimeMillis();
return zipped_text;
} catch(IOException e) {
throw new RuntimeException("Failed to zip content", e);
}
}