RT,谁能解释下这个函数,API里说readlimit 参数告知此输入流在标记位置无效之前允许读取的字节数,但是,实际情况下读取的字节数大于readlimit里的限定,执行reset()程序并不会认为标记位置变得无效,而返回到的位置去了。也就算是说,据我试验的结果,无论readlimit写什么,reset()都能执行。
    我百度,GOOGLE了好久还是没有满意的答复,希望能有高人来解此疑惑。
    谢谢!

解决方案 »

  1.   

    不好意思,我说的是一些输入流类(比如BufferedInputStream)里的方法(int readlimit)
    API里关于readlimit的解释是
    readlimit - the maximum limit of bytes that can be read before the  position becomes invalid.
    我理解是之后读取超过readlimit个字节后,就失效了,但与实际试验情况不符。
      

  2.   

    public void (int readlimit)
    在输入流中的当前位置上作标记。reset 方法的后续调用将此流重新定位在最后标记的位置上,以便后续读取操作重新读取相同的字节。 参数:
    readlimit - 在标记位置变得无效前可以读取字节的最大限制。
    LZ,看中文的API跟你描述的有点不同哦!
      

  3.   

    答:楼主的理解出偏差了.
    这个参数是含义是:在你读取的字节数<=readlimit时,流一定会确保 position不失效.即:只要你读取的字节数还没有到达readlimit,你随时都可以用reset()来重新从 position再次读取(因为:它确保 position不失效,若 position失效,则不能调用reset()来再次读取了).
    而当你读取的字节数超过readlimit时,则: position随时都可能会失效[不一定立即就失效.](即:不能确保调用reset()一定会能再次读取了)
    即:---在读取的字节数 <= readlimit时,一定确保不失效.而读取的字节数 > readlimit,就不能确保不失效(随时都可能失效),但不一定立即失效.如:定义BufferedIputStream bin=new new BufferedInputStream(in),2);//两个字节的buf
       (5);//位置在0处.readlimit是5个字节,即:确保在读取到5个字节之前,不失效
       bin.read();
      bin.read();//已读取了两个字节了
      bin.read();//怎么办?
    此时显然要读入新的数据到buf中,但这一来,原来的标记的数据就要被清楚(即:会失了.)
    这是不可以的(因为:还没有读到readlimit个字节即5个字节呢.),必须确保不能失效.
    因而:将不得不扩大buf,既装入新的数据,又保持原来的处数据一定在buf中,以备随时用reset()再次读取.