write(b,0,n)
解决了文件大小不一样的问题。
public int read(byte[] b) 返回的是读到数组中的有效个数, 假设数组是长度是1024, 前两次数组内容都读取完全了, 第三次数据不够1024, 只剩1023个数据, 那么 如果直接读取数组, 读到的是这次读到的1023个数据+上次最后一个数据(因为这次读取并没有覆盖掉), 因此使用write(b,0,n) 写b数组的内容,从索引0开始 写n个数据, 因为n是上面读取数组返回的有效个数, 这样就没问题啦
看下源码就知道为什么了。
public void write(byte b[]) throws IOException {
write(b, 0, b.length);
}