黑马程序员技术交流社区

标题: 拷贝文件时的问题 [打印本页]

作者: て淡莣了陌生    时间: 2013-5-15 10:23
标题: 拷贝文件时的问题
本帖最后由 て淡莣了陌生 于 2013-5-16 15:36 编辑

package cn.itcast;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

public class Enhance {

        /**
         * @param args
         * @throws IOException
         */
        public static void main(String[] args) throws IOException {
                FileInputStream fis = new FileInputStream("a.mp3");
                FileOutputStream fos = new FileOutputStream("b.mp3");
                byte[] arr = new byte[1024];
                int len;
                while((len = fis.read(arr))!=-1)
                        fos.write(arr);
                fis.close();
                fos.close();
        }

}
这段代码执行后是没问题的,能够把a.mp3拷贝出来,但是为什么它们的字节大小不一样啊,这是为什么啊,是代码有问题吗,那为什么还能执行呢?
作者: 刘胜寒    时间: 2013-5-15 10:27
fos.wirte(arr,0,len); 就行了。。
作者: 张旺达    时间: 2013-5-15 10:29
刘胜寒 发表于 2013-5-15 10:27
fos.wirte(arr,0,len); 就行了。。

给你加一分!
作者: 赵崇友    时间: 2013-5-15 10:40
一楼说的很对,你的这句 fos.write(arr);是把arr数组的所有元素都写到目的文件中了,而arr中有1024个元素,第一次写满这个数组就去用 fos.write(arr);这句往目的文件中写数据,这种情况不会有错,但是当原文件不是1024的整数倍的时候,就会导致最后一次循环的时候arr中并没有写满数据,有一部分是空的,而这个时候还是将arr中的1024个元素都写入目的文件包括那些空的元素。 所以你复制后的文件会比之前的要大,但是不会超过1024个字节。之所以可以运行,很好理解,是因为添加的部分放在了文件的最后了,不影响文件的读取,这和我们在写word的时候在最后一句添加了多个空格,但是并不影响我们阅读一样,是一个道理。
个人见解,仅供参考。。 多多交流……
作者: 刘胜寒    时间: 2013-5-15 11:45
赵崇友 发表于 2013-5-15 10:40
一楼说的很对,你的这句 fos.write(arr);是把arr数组的所有元素都写到目的文件中了,而arr中有1024个元素, ...

谁给我 加一分。。
作者: 赵崇友    时间: 2013-5-15 14:26
刘胜寒 发表于 2013-5-15 11:45
谁给我 加一分。。

找楼主给你加金币呀,哈哈。。木有权限给你加技术分。。。囧




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2