黑马程序员技术交流社区

标题: 自定义的BufferedInputStream问题 [打印本页]

作者: 徐传任    时间: 2012-9-16 13:09
标题: 自定义的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-9-16 13:18
public int myRead(){
                 if(count==0){//如果缓冲区里面数据读完了就重新开定义指针pos
                         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;
//不知道解决了你的疑问没?

作者: 马睿    时间: 2012-9-16 13:21
看代码好像没什么问题

然后又去看视频对照了一下。。。似乎流程顺序和老师做的完全一样

和归零没关系。。。因为是个类,有 if(count==0)所以POS不会清零

……最好把你的读取和写入代码贴出来分析一下
作者: 徐传任    时间: 2012-9-16 16:40
马睿 发表于 2012-9-16 13:21
看代码好像没什么问题

然后又去看视频对照了一下。。。似乎流程顺序和老师做的完全一样

谢谢。。
作者: 徐传任    时间: 2012-9-16 16:40
彭润生 发表于 2012-9-16 13:18
public int myRead(){
                 if(count==0){//如果缓冲区里面数据读完了就重新开定义指针pos
    ...

en ,明白了,谢谢
作者: 彭润生    时间: 2012-9-16 17:22
马睿 发表于 2012-9-16 13:21
看代码好像没什么问题

然后又去看视频对照了一下。。。似乎流程顺序和老师做的完全一样

他的if else里面都有pos=0




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