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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 Dreamer 于 2012-8-14 10:03 编辑

用这个自定义的缓冲方法来复制文件的时候,每次文件总有一小部分没有复制成功,请问下这是为什么呢??谢谢拉
  1. import java.io.BufferedOutputStream;
  2. import java.io.FileInputStream;
  3. import java.io.FileNotFoundException;
  4. import java.io.FileOutputStream;
  5. import java.io.IOException;

  6. public class MyBufferedDemo {

  7.         
  8.         public static void main(String[] args) {
  9.                 try {
  10.                         MyBuffered mbf = new MyBuffered(new FileInputStream("d:/hehe.jpg"));
  11.                         BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("d:/haha.jpg"));
  12.                         int x= 0;
  13.                         while((x = mbf.myRead()) != -1) {
  14.                                 try {
  15.                                         bos.write(x);
  16.                                 } catch (IOException e) {
  17.                                         e.printStackTrace();
  18.                                 }
  19.                         }
  20.                 } catch (FileNotFoundException e) {
  21.                         e.printStackTrace();
  22.                 }
  23.                
  24.         }

  25. }

  26. class MyBuffered {
  27.         private FileInputStream fir;
  28.         private int count = 0,pos = 0;
  29.         private byte[] buf = new byte[1024];
  30.         public MyBuffered(FileInputStream fir) {
  31.                 this.fir = fir;
  32.         }
  33.         public int myRead() {
  34.                 int b = 0;
  35.                 if(count == 0) {
  36.                         try {
  37.                                 count = fir.read(buf);
  38.                                 pos = 0;
  39.                                 if(count > 0 ) {
  40.                                         b = buf[pos];
  41.                                         pos++;
  42.                                         count--;
  43.                                         return b &255;
  44.                                 }
  45.                                 if(count == -1) {
  46.                                         return -1;
  47.                                 }
  48.                         } catch (IOException e) {
  49.                                 e.printStackTrace();
  50.                         }
  51.                 }
  52.               else  if(count > 0 ) {
  53.                         b = buf[pos];
  54.                         pos++;
  55.                         count--;
  56.                         return b&255;
  57.                 }
  58.                 if(count == -1) {
  59.                         return -1;
  60.                 }
  61.                 return -1;
  62.                
  63.         }
  64. }
复制代码

1 个回复

倒序浏览
好吧,原来我忘记关闭流或者刷新流了{:soso_e109:}

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 鼓励一下,赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马