用Buffered来实现复制过程中的问题

今天看来IO那章,然后写了个复制的程序,对于一般的小文本文件复制是没问题的,但是对于大文件(我用来测试的是8M的pdf文件,就存在问题了。)

 

首先说明下贴的图片,最上面的原文件,第二行是用BufferedReader跟BufferedWriter实现的复制,第三行是直接用InputStream跟OutputStream实现的。

 

发现第三行的总比第一行大,而且复制的结果都比原文件小,更有趣的是,beCopyed.pdf竟然能运行,而其他都不可以。第二行jsp.pdf是合理一点的,后面那个因为缺乏经验,没有加上dr.newLine();

 

具体原因还没研究出来,代码如下:

Buffered的

import java.io.*;

public class TestBuffered {

 public static void main(String[] args) {
  FileReader fr = null;
  FileWriter fw = null;
  BufferedReader br = null;
  BufferedWriter bw = null;
  try{
   fr = new FileReader("e:/JSP高级编程(希望版).pdf");
   fw = new FileWriter("e:/jsp.pdf");
   br = new BufferedReader(fr);
   bw = new BufferedWriter(fw);
  }catch(FileNotFoundException e){
   System.out.println("找不到文件");
  }catch(IOException e){
   System.out.println("无法写文件");
  }
  
  
  String s = null;
  try{
   while((s = br.readLine()) != null){
    bw.write(s);
    bw.newLine();
   }
  }catch(IOException e){
   System.out.println("复制文件出错");
  }finally{
   try{
    bw.flush();
    bw.close();
    br.close();
    fr.close();
    fw.close();
   }catch(IOException e){
    System.out.println("关闭文件出错");
   }
  }
  System.out.println("文件复制完成");
 }

}

 

 

 

Stream的:

import java.io.*;
public class TestFileInputStream {
 public static void main(String[] args) {
  InputStream is = null;
  OutputStream os =null;
  int b;
  try{
   is = new FileInputStream("e:/1.txt");
   os = new FileOutputStream("e:/s1.txt");
  }catch(FileNotFoundException e)
  {
   System.out.println("File not found");
  }
  try {
   while((b = is.read()) != -1){
    os.write(b);
    
   }
  } catch (IOException e) {
   e.printStackTrace();
  }
  finally{
   try {
    os.flush();
    os.close();
    is.close();
   } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
   }
   System.out.println("finish");
  }
 }

}

 

 

后话:刚刚用文本来查看了下,发现使用BufferedReader和BufferedWriter实现可以清楚看到字符,完全没有乱码,而用Stream实现的却跟原文件一样,有不少乱码,看来这就是根本远远,应该跟“/”有关。

 

刚刚又用BufferedInputStream跟BufferedOutputStream来实现,终于完美地复制出来了。同时也发现原来第三行用InputStream跟OutputStream实现复制出来的那个文件竟然大小增加,而且也刚好跟原文件大小一致!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值