Перед нами стоит странная проблема миграции с JDK 1.7 32-bit на 64-разрядную. В нашем приложении мы используем JDK Zip-библиотеку для сжатия и распаковки байта [] и готовим QR-код (используя zxing). Все работает отлично на 32-битном JDK 1.7, но при раздувании JDK 1.7 сбой происходит со следующим Исключением:
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;
}
Буду признателен за любую оказанную помощь.
Ваш метод сжатия обнаруживает исключения, но не регистрирует их. Возможно, сжатие тоже не работает, но вы его не замечаете, потому что вы не регистрируете