webDav下载图片出现图片变绿问题
每个人碰到的问题不一样,我只是把我碰到的情况记录下来,希望可以对他人有用!
问题描述
下载完成后的图片文件大小稍小于服务器上的大小,查看图片是有局部变绿或者局部异常。如下图片:
问题解决
-
读取字节数和写出字节数不一致
// 错误代码 BufferedOutputStream bos = new BufferedOutputStream(out); int len = 0; while (in.read(bytes) != -1) { // 1. 写出时直接写出整个字节数组长度 bos.write(bytes, 0, bytes.length); }
// 正确代码 BufferedOutputStream bos = new BufferedOutputStream(out); int len = 0; while ( (len = in.read(bytes)) != -1) { // 1. 改成写出读取的字节长度 bos.write(bytes, 0, len); }
-
需要冲洗缓存池
// 完整代码 public static void transStream(InputStream in, OutputStream out) { byte[] bytes = new byte[1024]; try { BufferedOutputStream bos = new BufferedOutputStream(out); int len = 0; while ( (len = in.read(bytes)) != -1) { bos.write(bytes, 0, len); } // 2.需要执行flush bos.flush(); in.close(); } catch (IOException e) { logger.error("InputStream trans OutputStrean error.", e); throw new StreamException("InputStream trans OutputStrean error."); } }
我碰到的问题是:如果有没有执行flush
方法,就会出现图片中 注1
的情况,执行后即可解决。