下面代码
byte[] data = new byte[100];
DataInputStream dis = new DataInputStream(new ByteArrayInputStream(data));while (true){
    //.............................
    //将新数据写到data中
    dis.reset();
    dis.readXXX();
    //.............................
}
我想问,dis.reset()的作用是什么,为什么每次dis.readXXX()读到的数据都是最新的,是不是在执行dis.reset()的时候,data作为ByteArrayInputStream的缓冲区数组也被清空了,所以data中存放的总是最新数据
且为什么reset()不结合(int i)一起用,还望指教!

解决方案 »

  1.   

    Repositions this stream to the position at the time the  method was last called on this input stream.意思是重新定位到上一次调用()方法的流的位置
      

  2.   

    帮助文档上的就不用介绍了,我看的是中文的帮助,只是不明白的是为什么这里每次dis.readXXX()读到的数据都是最新的,data数组是不是被清空了,还是追加保存,还有代码中根本没有调用()方法,为什么reset()也起作用
      

  3.   

    据我所知,清空缓冲区是用flush()的,而且,不用reset()也能得到最新的数据,流的指针就一指往下移动,用了reset()就返回到()方法执行时指针所在的位置上。楼主你试试把reset()这句去掉,看看程序是不是照样执行正常就知道了。
      

  4.   

    去掉dis.reset()这句则显示结果不正确,我的理解是首先读入的信息存入数组(数组的容量足够存储一条记录),dis.reset()将指针指向数组起始位置,然后用readXXX()读取记录的各项值,之后清空数组,重复步骤做下一条数据的读取,不知是否该过程
      

  5.   

    没调用过 () 就相当于在一开始缺省调用了 (0) 呗。你的程序每次都要从数组的开头位置读一个 XXX 进来,当然要先 reset() 了。