黑马程序员技术交流社区

标题: IO转换流 [打印本页]

作者: linuxpara910829    时间: 2015-2-9 15:40
标题: IO转换流
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();
    }
   }
  }
}
}
问什么我用转换流复制出来的字节文件不对呢?

作者: 书生灬流年    时间: 2015-2-9 15:50
读取图片用字节流,你这里用交换流转成字符在转成字节 会丢失的,要提高效率可以用字节流的装饰流啊;
BufferedInputStream,BufferedOutputStream
作者: Doug    时间: 2015-2-9 17:43
只有文本才能使用xxxReader/xxxWriter---字符流,其他的都是字节流(xxxStream)。

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

明白了  谢谢
作者: huangchunwei    时间: 2015-2-10 09:32
学习了。。加油。。
作者: franksight    时间: 2015-2-10 11:35
学习学习。。




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