Android4.4.4 GZIPOutputStream报错:Stream error

本文介绍了一种在Android 4.4.4版本上使用GZip进行文件压缩时遇到StreamError的问题,并通过调整GZIPOutputStream的处理方式成功解决了该问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在android 4.4.4 机器上使用网友提供的GZipUtils方法进行GZip压缩,但是会一直报错Stream error。错误位置:

  1. public static void compress(InputStream is, OutputStream os)  
  2.             throws Exception {  
  3.   
  4.         GZIPOutputStream gos = new GZIPOutputStream(os);  
  5.   
  6.         int count;  
  7.         byte data[] = new byte[BUFFER];  
  8.         while ((count = is.read(data, 0, BUFFER)) != -1) {  
  9.             gos.write(data, 0, count);  
  10.         }  
  11.   
  12.         gos.finish();  
  13.   
  14.         gos.flush();  
  15.         gos.close();  
  16.     } 

但是其他android 版本的机器调试就毫无问题。百度也没有相关问题,只是说流的开启关闭顺序可能存在冲突。

因为我真正使用的方法是compress(byte[] data),所以我觉得flush(),和close()可能是问题原因。

  1. public static byte[] compress(byte[] data) throws Exception {  
  2.         ByteArrayInputStream bais = new ByteArrayInputStream(data);  
  3.         ByteArrayOutputStream baos = new ByteArrayOutputStream();  
  4.   
  5.         // 压缩  
  6.         compress(bais, baos);  
  7.   
  8.         byte[] output = baos.toByteArray();  
  9.   
  10.         baos.flush();  
  11.         baos.close();  
  12.   
  13.         bais.close();  
  14.   
  15.         return output;  
  16.     } 

于是将compress(InputStream is, OutputStream os)函数下的flush()和close()方法调用全部注释掉,再运行,OK!

======================

个人不是Java高手,到这里就没有继续研究了,只是看GZIPOutputStream的说明文档,这个类只有finish()和write()方法,flush()和close()方法都是父类的却没有在这个类中示出,所以其实调用GZIPOutputStream 对象的finish()方法就足够了。(个人表面理解而已,如有混淆视听,请见谅!)


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值