標籤:android gzip
在android 4.4.4 機器上使用網友提供的GZipUtils方法進行GZip壓縮,但是會一直報錯Stream error。錯誤位置:
- public static void compress(InputStream is, OutputStream os)
- throws Exception {
-
- GZIPOutputStream gos = new GZIPOutputStream(os);
-
- int count;
- byte data[] = new byte[BUFFER];
- while ((count = is.read(data, 0, BUFFER)) != -1) {
- gos.write(data, 0, count);
- }
-
- gos.finish();
-
- gos.flush();
- gos.close();
- }
但是其他android 版本的機器調試就毫無問題。百度也沒有相關問題,只是說流的開啟關閉順序可能存在衝突。
因為我真正使用的方法是compress(byte[] data),所以我覺得flush(),和close()可能是問題原因。
- public static byte[] compress(byte[] data) throws Exception {
- ByteArrayInputStream bais = new ByteArrayInputStream(data);
- ByteArrayOutputStream baos = new ByteArrayOutputStream();
-
- // 壓縮
- compress(bais, baos);
-
- byte[] output = baos.toByteArray();
-
- baos.flush();
- baos.close();
-
- bais.close();
-
- return output;
- }
於是將compress(InputStream is, OutputStream os)函數下的flush()和close()方法調用全部注釋掉,再運行,OK!
======================
個人不是Java高手,到這裡就沒有繼續研究了,只是看GZIPOutputStream的說明文檔,這個類只有finish()和write()方法,flush()和close()方法都是父類的卻沒有在這個類中示出,所以其實調用GZIPOutputStream 對象的finish()方法就足夠了。(個人表面理解而已,如有混淆視聽,請見諒!)
Android4.4.4 GZIPOutputStream報錯:Stream error