美文网首页
java.util.zip.DataFormatExceptio

java.util.zip.DataFormatExceptio

作者: 落寞寞su | 来源:发表于2016-12-16 21:51 被阅读0次

今天收到一个bug;是红米上用wifi在web端接收文件,web端输入ip地址时,红米崩溃;

然后查看崩溃日志:java.util.zip.DataFormatException: stream error;发现是在android

在网上查了查,就看到说是使用GZipUtils方法进行GZip压缩时android4.4.4手机上会报错

gos.finish();

gos.flush();

去掉其中一个;

不过试了一下还是崩溃,就在项目里找到用这个压缩方法的地方;

public void writeTo(OutputStream outstream) throws IOException {

if (outstream == null) {

throw new IllegalArgumentException("Output stream may not be null");

}

InputStream instream = new ByteArrayInputStream(this.byteArray);

if (!isGzipByteArray) {

outstream = new GZIPOutputStream(outstream);

}

try {

copy(instream, outstream);

} finally {

instream.close();

}

}

protected void copy(InputStream instream, OutputStream outstream) throws IOException {

byte[] tmp = new byte[Constants.Config.BUFFER_LENGTH];

int l;

while ((l = instream.read(tmp)) != -1) {

outstream.write(tmp, 0, l);

}

if (outstream instanceof GZIPOutputStream) {

//注意流关闭顺序

((GZIPOutputStream) outstream).flush();

}

//注意流关闭顺序

outstream.close();

}

然后在GzipUtils里面

public void gzip(InputStream from, OutputStream to) throws IOException {

GZIPOutputStream gos = new GZIPOutputStream(to);

int count;

byte[] buffer = new byte[Config.BUFFER_LENGTH];

while ((count = from.read(buffer)) != -1) {

gos.write(buffer, 0, count);

}

/**

* 只需要一个finish()即可,否则会造成stream err,崩溃

* @author subowen 2016-12-15

*/

gos.finish();

//        gos.flush();

}

这样就不崩溃了;哈哈 菜鸟一枚,也不确定主要是什么问题,不过解决了

相关文章

  • java.util.zip.DataFormatExceptio

    今天收到一个bug;是红米上用wifi在web端接收文件,web端输入ip地址时,红米崩溃; 然后查看崩溃日志:j...

  • java.util.zip.DataFormatExceptio

    问题描述: Androi使用GZip对文件进行压缩操作的时候,报出此异常(Android版本是4.4.2) 解决方...

网友评论

      本文标题:java.util.zip.DataFormatExceptio

      本文链接:https://www.haomeiwen.com/subject/zbbyettx.html