黑马程序员技术交流社区

标题: 关于复制音乐或者图象文件的问题 [打印本页]

作者: 水云间    时间: 2013-5-26 11:34
标题: 关于复制音乐或者图象文件的问题
在复制音乐或者图象时,我们一般用字节流,比如下面代码:
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();
        }
}

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

作者: 张旺达    时间: 2013-5-26 11:41
字符流不是专门针对文本的吗?
作者: 王溢君    时间: 2013-5-26 11:46
可以用字符流复制。但是复制出来的不一定能打开。因为字符流复制的时候要去查表。
作者: 石贤芝    时间: 2013-5-27 15:58

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

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

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

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

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


作者: 无妄无涯    时间: 2013-5-27 16:40
用字符流来复制图片或音乐文件,复制出来的是不可用的乱码文件。字符流会对照编码表来读取和写入文件,但是音乐文件和图片文件的二进制数据代表的内容并不对应字符编码表,你用字符编码表解析后再拼凑成文件自然是错误的了。




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