本帖最后由 严明 于 2012-6-27 00:00 编辑
在毕老师复制mp3文件的视频里,有这么一段代码,声明mp3文件比1024大
FileInputStream fis = newFileInputStream("a.mp3");
FileOutputStream fos= new FileOutputStream("copy.mp3");
byte[]buffer = new byte[1024];
int len;
while ((len= fis.read(buffer)) != -1)
fos.write(buffer, 0,len);
fis.close();
fos.close(); 我将红色部分改成: fos.write(buffer); 这样也能复制成功 那么write()的时候为什么传入数组的长度呢? 视频中好像是这样说的: 最后一次将字节装入字节数组中, 但是最后一次读取的字节总数 并没有1024 个, 所以最后一次读取的数据会覆盖 倒数第二次装在数组中的数据, 但是它无法全部覆盖,那么 就会覆盖数组的前半部分了 数组的后半部分仍然是倒数第二次的数据.
我用fos.write(buffer) 这样是将最后一次数组里面的全部数据(包括最后一此存在数组里面前半部分的 和 倒数第二次保留在数组后半部分的)都写入文件copy.mp3 按理说这种方法复制出来的文件字节总数一定会比原文件大, 但是结果是跟原文件是一样大的,why?
|