日期:2014-05-20  浏览次数:20701 次

求理解data[ptr++]和data[ptr+1]有什么不同,为什么后者造成死循环,下标一直是0

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,必定死循环