我目前正在评估EXI来压缩大型XML文件。 Large表示一个20 GB(二十)的XML文件。
EXI压缩编解码器和非EXI压缩编解码器(gzip / lzma)都集成在Java虚拟机上运行的Scala应用程序中。 GZIP和LZMA由commons-compress提供。所有编解码器都在这些第三方库中用Java实现。
在具有8 GB(JVM为6 GB)的64位Linux系统上,Exificient和OpenExi都可以编码,但无法解码,当原始时XML文件大约是10 GB。
GZIP / LZMA没有问题
Oracle JDK:1.8-8u40
JVM args:-Xmx6g -XX:+UseG1GC -XX:+UseStringDeduplication
生成的EXI编码的XML文件大小约为70 MB
我的问题:
答案 0 :(得分:1)
EXI格式提供"选项"限制内存使用。
https://www.w3.org/TR/exi/#options
valueMaxLength
和valuePartitionCapacity
限制EXI字符串表中的条目长度和数量。
例如,将valueMaxLength
设置为16表示如果大于16,则不会向表中添加字符串。字符串表在处理时可能会增长,需要保留在内存中直到结束。
选项valuePartitionCapacity
限制表格中的字符串数量(循环方式)。
使用EXI压缩时,请考虑减少blockSize
。
希望这有帮助,
- 丹尼尔