A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© て淡莣了陌生 中级黑马   /  2013-5-15 10:23  /  1442 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 て淡莣了陌生 于 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拷贝出来,但是为什么它们的字节大小不一样啊,这是为什么啊,是代码有问题吗,那为什么还能执行呢?

点评

谢谢Sword 给的技术分。好开心。。  发表于 2013-5-16 11:57

评分

参与人数 1技术分 +1 收起 理由
Sword + 1

查看全部评分

5 个回复

倒序浏览
fos.wirte(arr,0,len); 就行了。。

评分

参与人数 1技术分 +1 收起 理由
Sword + 1 呵呵,我给你加

查看全部评分

回复 使用道具 举报
刘胜寒 发表于 2013-5-15 10:27
fos.wirte(arr,0,len); 就行了。。

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

谁给我 加一分。。
回复 使用道具 举报
刘胜寒 发表于 2013-5-15 11:45
谁给我 加一分。。

找楼主给你加金币呀,哈哈。。木有权限给你加技术分。。。囧
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马