黑马程序员技术交流社区

标题: 字节流的问题,大侠帮忙啊~~~!感激不尽 [打印本页]

作者: a8851625    时间: 2014-11-1 22:54
标题: 字节流的问题,大侠帮忙啊~~~!感激不尽
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应该是没问题的。没提升之前都能用,提升了就成这样了?求分析!。。。卡住好久了!!




作者: qq8921310    时间: 2014-11-1 23:22
应该不是255 和 0xff 的问题,当取完的时候也就是count ==0 的时候你重置了数组里的数据,但是没有重置指针。pos ==0. pos 一直在++。超过了数组的下标。自然就会有越界的异常了、。
作者: 戏言丶    时间: 2014-11-2 00:48
一看提示就知道是角标越界,并不是转换类型的问题,是你没有把pos清零




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