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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© q19871127 中级黑马   /  2015-6-12 12:29  /  751 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 q19871127 于 2015-6-12 21:07 编辑

使用字节流和字符流 复制文件的时候
字节流 复制的文件正常
字符流的文件 会比源文件小一点
字符流是不是会有什么复制不到 还是怎么得

8 个回复

正序浏览
视频文件用字符流去复制时,是先将文件中的数据按照字节读取出来,再去查编码表将字节传化为字符,因为是音频文件所以字节的组成范围比较广,而编码表的字符是有限的,有的字节组成是在编码表里找不到的,这些在编码表里找不到的字节就会被丢弃掉,所以复制完的文件比源文件小。建议复制音频图片等文件用字节流。
回复 使用道具 举报
计算机存储文件都是二进制形式的,如果对文件操作,就用字节,对文本操作用字符流。字符流就是对字节流的一个封装,使其操作文本更加方便。
回复 使用道具 举报
q19871127 发表于 2015-6-12 20:16
打不开的  目前就是纠结在这里
字符流 复制的时候 是有什么复制不到 还是 被丢弃了 不太清楚啊 ...

视频底层存储都是二进制的,用字符数组去复制的话,有可能内部有些数据被丢弃。直接百度或者问老师吧
回复 使用道具 举报
java8023 发表于 2015-6-12 20:14
复制完成,还能打开吗,若是不能说明有丢弃,说是可能,那就是压缩啊

打不开的  目前就是纠结在这里
字符流 复制的时候 是有什么复制不到 还是 被丢弃了 不太清楚啊
回复 使用道具 举报
复制完成,还能打开吗,若是不能说明有丢弃,说是可能,那就是压缩啊
回复 使用道具 举报
看是不是编码的不一样!
回复 使用道具 举报
本帖最后由 q19871127 于 2015-6-12 19:51 编辑
edithe 发表于 2015-6-12 19:47
没代码。说什么都是空的
代码如下  我用字符流和字节流复制同一个avi文件大小为40mb,字节流 复制正常,字符流复制完只有35MB.
  1. import java.io.BufferedInputStream;
  2. import java.io.BufferedOutputStream;
  3. import java.io.BufferedReader;
  4. import java.io.BufferedWriter;
  5. import java.io.File;
  6. import java.io.FileInputStream;
  7. import java.io.FileOutputStream;
  8. import java.io.FileReader;
  9. import java.io.FileWriter;
  10. import java.io.IOException;

  11. public class Demo {
  12.         public static void main(String[] args) throws IOException {
  13.                 File f1=new File("D:\\1.avi");
  14.                 File f2=new File("E:\\zifu.avi");
  15.                 File f3=new File("E:\\zijie.avi");
  16.                
  17.                 BufferedInputStream bfin=new BufferedInputStream(new FileInputStream(f1));
  18.                 BufferedOutputStream bfout=new BufferedOutputStream(new FileOutputStream(f2));
  19.                 byte[] bytearr=new byte[1024];
  20.                 int x=0;
  21.                 while((x=bfin.read(bytearr))!=-1){
  22.                         bfout.write(bytearr,0,x);
  23.                 }
  24.                 bfin.close();
  25.                 bfout.close();
  26.                
  27.                 BufferedReader bfr=new BufferedReader(new FileReader(f1));
  28.                 BufferedWriter bfw=new BufferedWriter(new FileWriter(f3));
  29.                 char[] chararr=new char[1024];
  30.                 int s=0;
  31.                 while((s=bfr.read(chararr))!=-1){
  32.                         bfw.write(chararr, 0, s);
  33.                 }
  34.                 bfr.close();
  35.                 bfw.close();
  36.         }
  37. }
复制代码
回复 使用道具 举报
没代码。说什么都是空的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马