黑马程序员技术交流社区

标题: 关于自定义BufferedInputStream出现的问题。 [打印本页]

作者: zhouxp3323    时间: 2012-3-27 23:46
标题: 关于自定义BufferedInputStream出现的问题。
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去复制文件的时候,文件老是没有复制全,这个程序有什么问题吗?求高手解决
作者: 张明星    时间: 2012-3-28 00:30
把最后一个语句中的 pos=0;去掉
作者: yangshang1    时间: 2012-3-28 07:12

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
作者: yangshang1    时间: 2012-3-28 07:13
count = in.read(buf);
这个是一次就读到数组里了
作者: 抓哇    时间: 2012-3-28 08:58
都是根据count做判断 如果为0则进行读取的操作 如果大于0才放到数组 小于0则结束
也就是而读取的时候才有POSE从0到1023读取即count = in.read(buf);POSE=0 都需要的
而大于0的时候只是仅仅吧要准备读取的字节放到数组中  按正常逻辑应该是第2步跟第一步换下为位置好好理解些  




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