FileInputStream fis = new FileInputStream("Adele - Rolling in the Deep.mp3");
FileOutputStream fos= new FileOutputStream("dest.mp3"); byte[] buffer = new byte[1024]; int len; while ((len = fis.read(buffer)) != -1) fos.write(buffer, 0, len); fis.close(); fos.close();
使用自定义数组拷贝时,为什么要传入数组的长度呢?
传入len,是从数组的第一个拷贝到最后一个,那直接传入buffer不就行了吗?
答:使用write(buffer, 0, len)是解决数据多余的问题:在你每read(byte[] buffer)一次后,它就将一定长度的数据写入到了buffer中,它的长度取决于以下情况 :Read(char[] chr)方法从指定的文件读chr.length到chr字符数组中,如果chr.length大于文件中的字符长度,则数据全部放在chr数组中;如果chr.length < 文件中字符长度,读一次,就写人chr.length的数据,下次度接着上次读到的末尾继续读,并将第上一次写入的数据覆盖掉,如果再读到某次时,要读入的文件的数据长度〈 str.length,就依次覆盖,没有覆盖到的仍是上一次覆盖后的数据。len = fis.read(buffer)返回的是每次读入的实际长度,如果不指定len,它会将上一次没被覆盖掉的数据写入,造成数据多余。
---------------------- android培训、 java培训、期待与您交流! ----------------------详细请查看: http://edu.csdn.net/heima