我有机会预设字典以进行 deflate 压缩。这对我来说是有意义的,因为要压缩的数据相对较小,为 1kb-3kb,而且我有大量代表性示例。要压缩的数据由任意字节序列组成,因此标记化等不是一个好方法。此外,数据显示大量重复(数据示例之间),因此好的字典可能会给出非常好的结果。问题是如何算出好的字典呢?是否有一种算法可以计算最佳字典(给定样本数据)?
我开始研究前缀树,但不清楚如何在这种情况下使用它们。
最好的问候,贾里克
我试图解压缩使用Jean-loup Gailly在20世纪90年代编写的ZLIB库压缩的数据.我认为它是一个受欢迎的库(我看到很多程序都提供了它使用的zlib32.dll文件)所以我希望有人能够熟悉它来帮助我.我正在使用的是compress()函数,我从中读到了使用rfc-1951 DEFLATE格式.
这是我用来从流中读取一些压缩数据并解压缩的代码段:
InputStream is = new ByteArrayInputStream(buf);
//GZIPInputStream gzis = new GZIPInputStream(is);
InflaterInputStream iis = new InflaterInputStream(is);
byte[] buf2 = new byte[uncompressedDataLength];
iis.read(buf2);
Run Code Online (Sandbox Code Playgroud)
iis.read(buf2)函数抛出"数据格式错误"的内部异常.我也试过使用GZIPInputStream,但这也引发了同样的异常.
"buf"变量是byte []类型,我通过调试确认它与我的C程序从ZLIB compress()函数返回的内容相同(实际数据来自服务器上的TCP)."uncompressedDataLength"是C程序(服务器)也提供的未压缩数据的已知大小.
有没有人尝试使用这个库读/写数据,然后使用Java在Android上读/写相同的数据?
我确实在一些地方找到了一个"ZLIB的纯Java端口",如果我需要,我可以试试,但我宁愿使用内置/ OS功能,如果可能的话.