try {
            FileOutputStream tem = new FileOutputStream(mPath);
            byte[] mByte = new byte[mBufferSize];
            while (mInputStream.read(mByte) != -1) {
                tem.write(mByte);
            }
            tem.flush();
            tem.close();
        } catch (Exception e) {
            // TODO: handle exception
            e.printStackTrace();
        }
大神啊,你这样写肯定有问题啊
最后一次读取数据的时候可能不够mBufferSize,比如mBufferSize=1024,但是最后只有1个字节,那么剩下1023个字节就是多余的,所以文件就大一些
正确写法:
while ((len = mInputStream.read(mByte) )!= -1) {
                tem.write(mByte, 0, len);
            }

解决方案 »

  1.   

    这些简单的代码,直接使用开源的import org.apache.commons.io.IOUtils;OutputStream out = new BufferedOutputStream(new FileOutputStream(mPath));
    IOUtils.copy(conn.getInputStream(),out);
    out.flush();
    out.close();
      

  2.   

    嘿嘿……这个我遇到,你是不是把图片下载完后,只显示图片的一部分啊,根据你这个代码,问题是在你的 byte[] ,经过我的测试,每次获得 byte[] 的最大值是 1148,而且下载的过程中是把一个大图片资源分成好几个 1148 ,我是这样决解的