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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 水云间 中级黑马   /  2013-5-26 11:34  /  1459 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在复制音乐或者图象时,我们一般用字节流,比如下面代码:
import java.io.*;
class copyMp3
{
        public static void main(String[] args) throws IOException
        {
                FileInputStream fis=new FileInputStream("F:\\CET6.mp3");
                FileOutputStream fos=new FileOutputStream("F:\\1.mp3");
                int len;
                byte[] buf=new byte[1024];
                while((len=fis.read(buf))!=-1)
                {
                  fos.write(buf,0,len);

                }
                fis.close();
                fos.close();
        }
}

我想问,为何不能用字符流完成复制呢?如果用字符流复制会有什么问题呢?它的原因是什么呢?

评分

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

查看全部评分

4 个回复

正序浏览
用字符流来复制图片或音乐文件,复制出来的是不可用的乱码文件。字符流会对照编码表来读取和写入文件,但是音乐文件和图片文件的二进制数据代表的内容并不对应字符编码表,你用字符编码表解析后再拼凑成文件自然是错误的了。
回复 使用道具 举报

用字节流复制不会改变原来数据的大小,是多少就复制多少,是什么就复制什么。

而字符流 = 字节流 + 编码表。

也就是说用字符流复制媒体文件时,它会按照指定的码表来读写。如果它读到了在码表中没有对应格式的字符,就会按默认格式处理,把默认的字符写到了复制文件中,
而默认的字符和本来的字符的比特位表现形式一般是不一样的,甚至大小都不一样。

这样原来的数据和复制后的数据就不同了,甚至媒体文件复制前后的大小都可能不一样了。

所以不能用字符流复制媒体文件,字符流只能操作文本文件。

回复 使用道具 举报
王溢君 来自手机 中级黑马 2013-5-26 11:46:01
藤椅
可以用字符流复制。但是复制出来的不一定能打开。因为字符流复制的时候要去查表。
回复 使用道具 举报
字符流不是专门针对文本的吗?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马