2013-12-18 37 views
2

我必須做一些真正錯誤的事情。在Android上運行以下代碼時,它會生成截斷文件(_items_),而不會在日誌中出現任何異常或問題。使用OpenJDK 7運行相同的代碼,它會正確解壓文件。從Android上的GZIPInputStream截斷輸出

try { 
    final InputStream fis = new GZIPInputStream(new FileInputStream("/storage/sdcard/_items")); 
    try { 
     final FileOutputStream fos = new FileOutputStream("/storage/sdcard/_items_"); 
     try { 
      final byte[] buffer = new byte[1024]; 
      int n; 
      while ((n = fis.read(buffer)) != -1) { 
       fos.write(buffer, 0, n); 
      } 
     } finally { 
      fos.close(); 
     } 
    } finally { 
     fis.close(); 
    } 
} catch (final IOException e) { 
    e.printStackTrace(); 
    throw new RuntimeException(e); 
} 

我已經試過這與Android模擬器(API 18)和Desire HD(Android 2.3.5)與相同的越野車結果。

輸入文件(_items):https://drive.google.com/file/d/0B6M72P2gzYmwaHg4SzRTYnRMOVk/edit?usp=sharing

的Android截斷輸出文件(_items_):https://drive.google.com/file/d/0B6M72P2gzYmwMUZIZ2FEaHNZUFk/edit?usp=sharing

+0

我看到相同的行爲。請在http://b.android.com/上提交錯誤。 – fadden

+0

完成 - https://code.google.com/p/android/issues/detail?id=63873。任何想法的解決方法? –

+0

我不知道它是否有幫助,但是重新壓縮文件(gunzip然後gzip)導致壓縮的數據文件被我的設備正確處理。你用什麼來壓縮數據? – fadden

回答

1

AOSP bug一直與分析從Dalvik的小組的工程師更新。

摘要:gzip流已將multiple members連接在一起,並且解壓縮程序有望處理它們,但Dalvik的實現在第一個之後停止。

除非有辦法說服數據源以不同方式壓縮其數據流,否則您需要找到GZIPInputStream的替代品。