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,没想到造成死循环,下标一直是0

inputstream read()
------解决方案--------------------
肯定死循环啊,ptr++指针会向后走的,
ptr+1指针都不动,一直读那一块还不死循环啊!ptr值都不变的!
------解决方案--------------------
ptr++ //ptr每次会加1
ptr+1 //ptr不会变化,一直都是0,所以read()永远不会返回-1,即造成死循环
------解决方案--------------------
ptr+1只代表一个位置,ptr值不改变;ptr++相当于ptr=ptr+1,ptr值自增,读取位置改变,不然ptr永远小于data.length,必定死循环