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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhouxp3323 黑马帝   /  2012-3-27 23:46  /  1732 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

class MyBufferedInputStream {

        private InputStream in;
        private byte[] buf = new byte[1024*4];
        int pos = 0,count = 0;
       
        MyBufferedInputStream(InputStream in){
                this.in = in;
        }
        public int myRead(){
                if(count==0){
                        try {
                                count = in.read(buf);
                        } catch (IOException e) {
                                e.printStackTrace();
                        }
                        if(count<0){
                                return -1;
                        }
                        pos = 0;
                        byte b = buf[pos];
                        count--;
                        pos++;
                        return b&255;
                }else if(count>0){       
                                                pos = 0;               
                        byte b = buf[pos];
                        count--;
                        pos++;
                        return b&0xff;
                }
                return -1;
        }
}
我用这个自定义的BufferedInputStream去复制文件的时候,文件老是没有复制全,这个程序有什么问题吗?求高手解决

4 个回复

倒序浏览
把最后一个语句中的 pos=0;去掉
回复 使用道具 举报

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;


public class MyBufferedInputStream {

    private InputStream in;
    private byte[] buf = new byte[1024*4];
    int pos = 0,count = 0;
   
    MyBufferedInputStream(InputStream in){
            this.in = in;
    }
    public int myRead(){
                if(count==0)
                {
                         try {
                         count = in.read(buf);
                 } catch (IOException e) {
                         e.printStackTrace();
                 }
                }
                  
                  
                  
                    byte b = buf[pos];
                  
                    pos++;
                    if(b==0)
                            return -1;
                    else
                    return b&255;
            
    }
   public static void main(String[] args) throws Exception {
//           int a=0;
//           FileInputStream fis=new FileInputStream("in.txt");
//           a=fis.read();
//           while(-1!=a)
//            {
//                    System.out.println(a);
//                    a=fis.read();
//            }
           int a=0;
           MyBufferedInputStream mbis=new MyBufferedInputStream(new FileInputStream("in.txt"));
          while(-1!=(a=mbis.myRead()))
          {
                  System.out.println((char)a);
          }
   }
}
int.txt的内容是asdasdasdasd
回复 使用道具 举报
count = in.read(buf);
这个是一次就读到数组里了
回复 使用道具 举报
都是根据count做判断 如果为0则进行读取的操作 如果大于0才放到数组 小于0则结束
也就是而读取的时候才有POSE从0到1023读取即count = in.read(buf);POSE=0 都需要的
而大于0的时候只是仅仅吧要准备读取的字节放到数组中  按正常逻辑应该是第2步跟第一步换下为位置好好理解些  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马