2010-08-16 77 views
1

任何人都可以告訴我如何解壓縮一個字節數組?如何在Java中解壓縮一個字節的數組

這是我的代碼。我一直在嘗試它,它給了我一個DataFormatException

byte bArray[] = new byte[tSizeOfTile]; 
input.read(bArray, offset, limit); 

byte[] unComp = new byte[bArray.length + 100]; 

Inflater inflate = new Inflater(); 
inflate.setInput(bArray); 
inflate.inflate(unComp, offset, bArray.length + 100); 
inflate.end(); 
+0

從哪裏來這些數據在bArray?來自二進制文件的 – 2010-08-16 10:38:14

+0

。 – sajjoo 2010-08-16 10:39:08

回答

5

嗯,一個明確的問題是,你正在使用顯然沒有InputStream.read檢查返回值。這意味着您可能讀取的數據比您預期的要少。

此外,您正試圖膨脹到unComp的偏移量,但最大長度與unComp.length相同。這意味着如果offset是0以外的任何值,那麼您可能會嘗試寫入數組末尾。

您的意思是指偏移量是指輸入數組?我不相信這是什麼意思。您應該使用setInput只有提供輸入數據。

但是,通過使用InflaterInputStream而不是自己處理Inflate,您可以使所有這一切變得容易很多。

+0

我也使用過如此多的Streams,比如輸入流,SwappedDataInputStream和CountingInputstream,所以我不想使用任何其他流。我只是不知道它爲什麼給我DataFormatExeption。即使這個文件是使用Zlib編寫的,Inflater類也使用Zlib。所以不應該有任何問題。 – sajjoo 2010-08-16 12:47:42

+0

@sajjoo:你確定原始數據*實際有效*嗎?在壓縮它的代碼中可能存在錯誤? – 2010-08-16 13:15:17

相關問題