java.util.zip.ZipException:超额订阅的动态位长度树
我使用gzip压缩字符串,然后解压缩结果,但是我得到了以下异常,为什么 output: Exception in thread "main" java.util.zip.ZipException: oversubscribed dynamic bit lengths tree at java.util.zip.InflaterInputStream.read(Unknown Source) at java.util.zip.GZIPInputStream.read(Unknown Source) at Test.main(Test.java:25) 根据,一个可能的原因是您试图读取的ZIP文件已损坏。(我知道这与您的情况不完全相符……但我确信例外信息是指示性的。) 在您的例子中,问题是您正在将gzip流从字节数组转换为字符串,然后再转换回字节数组。这几乎肯定是有损操作,导致GZIP流损坏 如果您想将任意字节数组转换为字符串形式并返回,则需要使用为此目的而设计的字符串编码格式之一;e、 g.base64 或者,只需更改以下内容:java.util.zip.ZipException:超额订阅的动态位长度树,java,gzip,Java,Gzip,我使用gzip压缩字符串,然后解压缩结果,但是我得到了以下异常,为什么 output: Exception in thread "main" java.util.zip.ZipException: oversubscribed dynamic bit lengths tree at java.util.zip.InflaterInputStream.read(Unknown Source) at java.util.zip.GZIPInputStream.read(Unknown Sourc
String out = outstream.toString();
ByteArrayInputStream in = new ByteArrayInputStream(out.getBytes());
为此:
byte[] out = outstream.toByteArray();
ByteArrayInputStream in = new ByteArrayInputStream(out);
根据,一个可能的原因是您试图读取的ZIP文件已损坏。(我知道这与您的情况不完全相符……但我确信例外信息是指示性的。)
在您的例子中,问题是您正在将gzip流从字节数组转换为字符串,然后再转换回字节数组。这几乎肯定是有损操作,导致GZIP流损坏
如果您想将任意字节数组转换为字符串形式并返回,则需要使用为此目的而设计的字符串编码格式之一;e、 g.base64
或者,只需更改以下内容:
String out = outstream.toString();
ByteArrayInputStream in = new ByteArrayInputStream(out.getBytes());
为此:
byte[] out = outstream.toByteArray();
ByteArrayInputStream in = new ByteArrayInputStream(out);