1
從JDK 1.7 32位遷移到64位時,我們遇到了一個奇怪的問題。在我們的應用程序中,我們使用JDK Zip庫來壓縮和解壓縮byte []並準備QR碼(使用zxing)庫。一切都在JDK運行良好1.7 32位,但在JDK 1.7充氣失敗,出現以下異常:JDK 1.7 64位Inflater引發無效代碼長度集
java.util.zip.DataFormatException: invalid code lengths set
at java.util.zip.Inflater.inflateBytes(Native Method)
at java.util.zip.Inflater.inflate(Inflater.java:259)
at java.util.zip.Inflater.inflate(Inflater.java:280)
同樣的行爲在JDK 1.8的32位看到。
相關代碼
public static byte[] compress(String s) {
Deflater comp = new Deflater();
comp.setInput(s.getBytes());
comp.finish();
ByteArrayOutputStream bos = new ByteArrayOutputStream(s.length());
byte[] buf = new byte[1024];
try {
while (!(comp.finished())) {
int count = comp.deflate(buf);
bos.write(buf, 0, count);
}
bos.close();
} catch (Exception e) {
}
byte[] compressedData = bos.toByteArray();
return compressedData;
}
public static byte[] decompress(byte[] b) {
Inflater decomp = new Inflater();
decomp.setInput(b);
ByteArrayOutputStream bos = new ByteArrayOutputStream(b.length);
byte[] buf = new byte[1024];
try {
while (!(decomp.finished())) {
int count = decomp.inflate(buf);
bos.write(buf, 0, count);
}
bos.close();
} catch (Exception e) {
e.printStackTrace();
}
byte[] decompressedData = bos.toByteArray();
return decompressedData;
}
任何幫助深表感謝。
我們在jdk-zip-lib中也遇到了問題。它是一個通過中間件軟件在系統間交換消息的軟件,它的消息具有一定的大小限制。那些系統是windows/linux/unix,還有不同的jdk和/或jre ...最後,我們切換到commons-compress,... – slowy
jdk zip lib有很多bug,我們遇到了像slowy一樣的切換common-compress – kulatamicuda
謝謝你們。不幸的是切換不適合我。已經使用上述方案生成了很多文檔,如果我們切換,它們將變得毫無用處。不過,這是一個很好的建議。 –