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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

import java.io.*;

class MyBufferedInputStream
{
        private InputStream in;

        private byte[] buf=new byte[1024*4];

        private int pos=0,count=0;
        MyBufferedInputStream(InputStream in)
        {
                this.in=in;
        }

        //一次度一个字节,从缓冲区(字节数组)获取
        public int myRead()throws IOException
        {
                //通过in对象读取硬盘上的数据,并保存在buf中。
                if(count==0)
                {
                        count=in.read(buf);//count为0往里面装数据
                        if(count<0)
                                return -1;
                       
                        byte b=buf[pos];//取出pos对应的数据
                        count--;
                        pos++;
                        return b&255;//这里!!!!!!问题!!!!!
                }
                else if(count>0)
                {
                        byte b=buf[pos];//取出pos对应的数据
                        count--;
                        pos++;
                        return b&0xff;//这里!!!!!!问题!!!!!
                }
                return -1;
               
        }
        public void myClose()throws IOException
        {
                in.close();
        }
}

//很郁闷啊,这次是字节流的问题,我这个代码是按照毕老师视频写的。在没有 b&0xff;和255与上之前拷贝MP3会拷贝失败,毕老师解释是因为遇上连续8个1的情况,然后返回一个-1,导致循环停止,现在就把返回的结果与上255将原来的一个字节上升为前面带有0的4个字节。但是我与上之后编译通过运行报错
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 10240
        at MyBufferedInputStream.myRead(MyBufferedInputStream.java:25)
        at copyMP3.copy_2(copyMP3.java:45)
        at copyMP3.main(copyMP3.java:17)
我另外一个代码 copyMP3应该是没问题的。没提升之前都能用,提升了就成这样了?求分析!。。。卡住好久了!!



3 个回复

倒序浏览
应该不是255 和 0xff 的问题,当取完的时候也就是count ==0 的时候你重置了数组里的数据,但是没有重置指针。pos ==0. pos 一直在++。超过了数组的下标。自然就会有越界的异常了、。

点评

这哥们学C的。。  发表于 2014-11-2 01:08
回复 使用道具 举报
一看提示就知道是角标越界,并不是转换类型的问题,是你没有把pos清零
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马