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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© linuxpara910829 中级黑马   /  2015-2-9 15:40  /  1344 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

package IOTest;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
public class InOutPutStream {
public static void main(String [] args){
  BufferedReader bufin =  null;
  BufferedWriter bufout =  null;
  try {
   bufin = new BufferedReader(new InputStreamReader(new FileInputStream("d:\\405784.jpg")));
   bufout = new BufferedWriter(new OutputStreamWriter(new FileOutputStream("d:\\pic.jpg")));
   char[] by = new char [1024];
   int len =0;
//   String line ="";
   while((len=bufin.read(by))!=-1){
    bufout.write(by,0,len);
   }
  } catch (FileNotFoundException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }finally{
   if(bufin!=null){
    try {
     bufin.close();
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }
   if(bufout!=null){
    try {
     bufout.close();
    } catch (IOException e) {
     // TODO Auto-generated catch block
     e.printStackTrace();
    }
   }
  }
}
}
问什么我用转换流复制出来的字节文件不对呢?

8 个回复

倒序浏览
读取图片用字节流,你这里用交换流转成字符在转成字节 会丢失的,要提高效率可以用字节流的装饰流啊;
BufferedInputStream,BufferedOutputStream

评分

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

查看全部评分

回复 使用道具 举报
只有文本才能使用xxxReader/xxxWriter---字符流,其他的都是字节流(xxxStream)。
回复 使用道具 举报
没想明白,不是纯文本数据为什么要用字符流操作?
回复 使用道具 举报
图片,音频,视频,都是二进制字节流数据,只能使用字节流读写。不能使用字符的读写,即使你转换了,他底层还是字符流读写,所以不行
回复 使用道具 举报
bufin = new BufferedReader(new InputStreamReader(new FileInputStream("d:\\405784.jpg")));
看到你这一句,用字符流来操作非纯字符文件,我就知道你下面要问什么问题了。果不其然是复制文件,然后打开失败了。要知道字符流读取的写入的时候不仅在windows下会舍去读写到的 '\r\n' 字符,而且还要解码然后编码。。。。这中间的弯弯道子让你在一次读取再写入的过程中丢失了很多的数据。
       总结来说,纯文本文件(也就是字符文件,txt、sql、java等)可以使用字符流读取。媒体文件(mp3, jpg, avi),还是用文件流吧。
回复 使用道具 举报
书生灬流年 发表于 2015-2-9 15:50
读取图片用字节流,你这里用交换流转成字符在转成字节 会丢失的,要提高效率可以用字节流的装饰流啊;
Buff ...

明白了  谢谢
回复 使用道具 举报
huangchunwei 来自手机 中级黑马 2015-2-10 09:32:44
8#
学习了。。加油。。
回复 使用道具 举报
学习学习。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马