此处楼主要注意一点,就是fos.write(buf)是把数组中的全部元素写出去,fos.write(buf,0,len)则是写出角标从0到len的数组元素(包含buf[0],不包含buf[len]).
针对楼主的代码对错误的情况进行分析,假设a.txt文件中的最后一次读取的字节长度为a, list.txt文件中的字节总长度为s, 且a>s, 那么数组在最后一次读取a.txt时,buf[0]到buf[a]之间的元素全部为a.txt中的元素,写出后不会影响字节数组中元素的值,当写出后读入list.txt文件中的字节,但是由于list文件中的字节数s小于a,因此只会覆盖buf[0]-buf[s]之间的值,那么buf[s]到buf[a]之间的值还是a.txt中相应的值,因此使用fos.write(buf)写入全部数组元素时,buf[s]到buf[a]之间的元素也会写出,造成合并的文件中list.txt中的内容输出后还会有a.txt中的内容。
第二种方式即fos.write(buf,0,len)之所以正确,是因为每次输出的时候只会输出当次读入到字节数组中的元素,因此即便没有覆盖,也不会输出那部分内容。
楼主的代码如果用前一种情况的话合并的文件的实际大小会大于三个文件大小的总和,因为输出了一些多余的内容。
|