我需要解壓縮從互聯網下載的文本文件,大約256 kB壓縮,提取時大約2 mB。 Linux file
實用程序告訴我它「壓縮了16位數據」。展望它,我發現compress
使用LZW算法。 7-zip表示文件的「類型」是「Z」(擴展名也是如此),並且能夠在沒有任何問題的情況下對文件進行解壓縮,所以問題不在文件中。我也知道問題不在於我如何下載文件,因爲壓縮字節流與打開十六進制編輯器時顯示的字節相匹配。爲什麼我不能在Android上使用Java解壓縮這個LZW文件?
該文件本身是加拿大環境局的一個純文本臨近預報矩陣文件。不幸的是,我沒有足夠的信譽來添加另一個鏈接。
我一直無法找到任何內置的LZW解碼器,所以我不得不訴諸使用第三方庫。其中有很多,但我迄今爲止所嘗試的都沒有能夠解壓縮文件。
lzwj - 投擲IndexOutOfBoundsException: Invalid index 40223, size is 256
。 (索引本身並不重要)。然而,默認的碼字長度是12.我已經改變了源代碼字長度爲16,因爲file
的輸出似乎表明(在這個假設中,我錯了嗎?),但它會拋出相同的異常(顯示的索引在錯誤中的代碼字長度爲16)。
This algorithm還經過幾次修改以獲取輸入流而不是文件後,會引發索引超出範圍異常。但是,由於它似乎是由學生寫作的作業,所以無論如何我都不習慣使用它。
This library不幸的是只有一個compress
方法,並沒有做解壓縮。
7-zip JBinding似乎是我最好的選擇,但不幸的是,它似乎並不適用於Android,無論是使用全平臺的jar還是僅使用ARM的jar。
我遇到了更多的圖書館和個人課程源文件,但他們沒有與他們相關的許可證,我避免使用受版權保護的代碼。
任何人都可以幫助我找出這些錯誤的原因,或提供替代解決方案嗎?
你有沒有嘗試過Apache Commons Compress:https://commons.apache.org/proper/commons-compress/和http://stackoverflow.com/questions/36282358/android-7zip-a-folder-using-apache -commons-compress –
謝謝,完美的作品!我不知道如何在我的雷達下飛行,我甚至沒有在這裏提到任何其他LZW相關問題。 – andrej88