我试图 gzip 一个大(100mb 到 500mb)的 xml 文件。我已经创建了方法 Zip 来做到这一点。问题是它谈论太多时间来压缩。对于 200mb 需要 1.2 秒。对于 100mb xml 文件,我需要将时间减少 100 毫秒。如何优化以减少压缩时间?
我通过在压缩比上几乎没有妥协来减少时间。尝试了另一种算法,如 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);
}
}