与reset()联用import java.io.*;
public class Test {
  public static void main(String[] args) {
//此构造方法将in对象的currentPosition、Position为0
ByteArrayInputStream in = new ByteArrayInputStream("asdfqwer".getBytes());
int i; while(true){
in.(0); //1 Position == 0,1,2...

i = in.read(); //2 currentPosition++
if(i == -1)break;
System.out.print((char)i);

in.reset(); //3 currentPosition = Position

i = in.read(); //4 currentPosition++
if(i == -1)break;
System.out.print((char)i);

}
in.close();
 }
}1 Position == 0;
2 currentPosition == 1;
3 currentPosition == 0;
4 currentPosition == 1;1 Position == 1;
2 currentPosition == 2;
3 currentPosition == 1;
4 currentPosition == 2;......

解决方案 »

  1.   

    谢谢楼上的回复,还有一个疑问:public void (int readAheadLimit)其中readAheadLimit
    这个参数代表什么意思,根据你的程序,它好像不代表在readAheadLimit这个位置设置,而是在currentPosition+readAheadLimit这个位置设置,是不是这样呢?请您不吝指教,谢谢!
      

  2.   


    reset()方法就是将Position赋给currentPosition,read()方法从currentPosition读一字节,
    将currentPosition赋给Position,初值均为01 currentPosition == 0,Position == 0;读第currentPosition个字节,后currentPosition加1,Position不变2 currentPosition == 1,Position == 0;reset()后将currentPosition赋值为Position3 currentPosition == 0,Position == 0;读第currentPosition个字节,后currentPosition加1,Position不变4 currentPosition == 1,Position == 0;1 currentPosition == 1,Position == 1;
    2 currentPosition == 2,Position == 1;
    3 currentPosition == 1,Position == 1;
    4 currentPosition == 2,Position == 1;......
      

  3.   

    万分感激楼上的回复,还有一个疑问public  void  (int  readAheadLimit)其中readAheadLimit 这个参数代表什么意思
      

  4.   

    public  void  (int  readAheadLimit)其中readAheadLimit 这个参数代表什么意思
    readAheadLimit是指在位置前最多可读入的字节数,然而位置无法通过手工设置定位在第n个字节,只能通过()方法将当前current位置设为位置,可见current位置不会小于位置,故而如何在位置前读入字节呢,此参数无效。源代码如下:    public void (int readAheadLimit) {
     = pos;
        }根本就没用到参数readAheadLimit。另外,jdk文档中也提到Note: The readAheadLimit for this class has no meaning. 
                          ^^^^^