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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 徐传任 中级黑马   /  2012-9-16 13:09  /  1397 人查看  /  5 人回复  /   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复制文件,文件老是没有复制全,这个程序有什么问题吗?谢谢

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
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;
//不知道解决了你的疑问没?

评分

参与人数 1技术分 +1 收起 理由
刘芮铭 + 1 赞一个!

查看全部评分

回复 使用道具 举报
看代码好像没什么问题

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

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

……最好把你的读取和写入代码贴出来分析一下
回复 使用道具 举报
马睿 发表于 2012-9-16 13:21
看代码好像没什么问题

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

谢谢。。
回复 使用道具 举报
彭润生 发表于 2012-9-16 13:18
public int myRead(){
                 if(count==0){//如果缓冲区里面数据读完了就重新开定义指针pos
    ...

en ,明白了,谢谢
回复 使用道具 举报
马睿 发表于 2012-9-16 13:21
看代码好像没什么问题

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

他的if else里面都有pos=0
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马