import java.io.IOException;
import java.io.InputStream;public class myOwnStream1
{
public static void main(String[] args) throws Exception
{
byte[] b = new byte[16];
for (int i = 0; i < b.length; i++)
{
b[i] = (byte) i;
} MyByteArrayInuputStream mbais = new MyByteArrayInuputStream(b); while (true)
{
int c = mbais.read();
if (c < 0)
{
break;
}
System.out.print(c + " ");
} mbais.close();
}
}class MyByteArrayInuputStream extends InputStream
{
protected byte[] data; protected int ptr = 0; public MyByteArrayInuputStream(byte[] b)
{
this.data = b;
} @Override
public int read() throws IOException
{
return (ptr < data.length) ? (data[ptr++]) : -1;
// return (ptr < data.length) ? (data[ptr+1]) : -1;
}}
如题,read()里面注释掉那句,自己写时候随手一个+1,没想到造成死循环,下标一直是0inputstreamread()

解决方案 »

  1.   

    肯定死循环啊,ptr++指针会向后走的,
    ptr+1指针都不动,一直读那一块还不死循环啊!ptr值都不变的!
      

  2.   

    ptr++ //ptr每次会加1
    ptr+1 //ptr不会变化,一直都是0,所以read()永远不会返回-1,即造成死循环
      

  3.   

    ptr+1只代表一个位置,ptr值不改变;ptr++相当于ptr=ptr+1,ptr值自增,读取位置改变,不然ptr永远小于data.length,必定死循环
      

  4.   

    哥哥们,你们说的意思我明白byte[] data是不是个数组?protected int ptr = 0;是个成员变量在while循环的情况下,pre=pre+1,一直加...........=================================
    明白了,没加到自身上面去。