2014-12-23 26 views
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; 
} 

任何幫助深表感謝。

+1

我們在jdk-zip-lib中也遇到了問題。它是一個通過中間件軟件在系統間交換消息的軟件,它的消息具有一定的大小限制。那些系統是windows/linux/unix,還有不同的jdk和/或jre ...最後,我們切換到commons-compress,... – slowy

+0

jdk zip lib有很多bug,我們遇到了像slowy一樣的切換common-compress – kulatamicuda

+0

謝謝你們。不幸的是切換不適合我。已經使用上述方案生成了很多文檔,如果我們切換,它們將變得毫無用處。不過,這是一個很好的建議。 –

回答

-1

你的壓縮方法捕捉異常但不記錄它們。也許壓縮失敗了,但你沒有注意到它,因爲你沒有記錄