本帖最后由 didengxiaren 于 2010-07-06 11:58:39 编辑

解决方案 »

  1.   

    API:public void (int readlimit)在此输入流中标记当前的位置。对 reset 方法的后续调用会在最后标记的位置重新定位此流,以便后续读取重新读取相同的字节。 
    readlimit 参数告知此输入流在标记位置失效之前允许读取许多字节。  的常规协定是:如果方法 Supported 返回 true,则输入流总会在调用  之后记住所有读取的字节,并且无论何时调用方法 reset ,都会准备再次提供那些相同的字节。但是,如果在调用 reset 之前可以从流中读取多于 readlimit 的字节,则根本不需要该流记住任何数据。 InputStream 的  方法不执行任何操作。 
    参数:
    readlimit - 在标记位置失效前可以读取字节的最大限制。
    另请参见:
    reset()
      

  2.   

    我看api没看懂啊。理解不了。
    import java.io.*;public class TestBufferedInputStream{
      public static void main(String args[]){
         try{   
            int c=0;   
          BufferedInputStream bi=
              new BufferedInputStream(new FileInputStream("E:\\javaIo\\1.txt"));
          for(int i=0;i<5&&(c=bi.read())!=-1;i++){
              System.out.print((char)c);
          }
          System.out.println();
          bi.(2);
                                  //这边我标记了两个字节,后面读了5个,怎么没失效?
          for(int i=0;i<5&&(c=bi.read())!=-1;i++){
              System.out.print((char)c);
          }
          System.out.println();
          bi.reset();
          for(int i=0;i<5&&(c=bi.read())!=-1;i++){
              System.out.print((char)c);
          }
          bi.close();
          }catch(IOException e){
             e.printStackTrace();
          }
      }
    }
      

  3.   

    的参数是readAheadLimit,可以再读多少字符,这是指读操作超越了流尾之后的限制
    比如abcd,开始(4),如果读到read()为-1即超越流尾继续读了,再reset就会MarkInvalid,如果开始(5)就可以避免,看一个例子调试一下:
    import java.io.BufferedReader;
    import java.io.CharArrayReader;
    import java.io.IOException;class BufferedReaderDemo {
    public static void main(String[] args) throws IOException {
    String s = "test";
    char buf[] = new char[s.length()];
    s.getChars(0, s.length(), buf, 0);
                    
    System.out.println(buf);
    System.out.println(buf.length);
                    
    CharArrayReader in = new CharArrayReader(buf);
    BufferedReader f = new BufferedReader(in);
    int c, d = 0;
    f.(s.length()); 

    while ((c = f.read()) != -1) {
    System.out.println(c);
    d++;
    }
    System.out.println("d = " + d);
    f.reset();
    }
    }
      

  4.   

    想像下 数据是"abcd" (2)后 有一个指针在b的位置 然后继续读(该干吗干吗); reset()后指针又回到b.
    不知道说的对不对
      

  5.   

    讨厌说baidu google 上有 或API上讲的很详细的,有方便的途径当然是选择方便的途径学习了.
      

  6.   

    br.(100);在第100个字节处做标记,从这个地方开始读。
    br.reset();回到你做标记的地方。
    我也在学IO,自己的理解
      

  7.   

    的参数是readAheadLimit, 可不可以理解为预读的限制, 我修改了一下回贴中的程序,的参数为2,第一次读入2个字节,reset后,回到初始位置重新读。
    public static void main(String[] args) throws IOException  {
    String s = "test";
    char buf[] = new char[s.length()];
    s.getChars(0, s.length(), buf, 0); System.out.println(buf);
    System.out.println(buf.length); CharArrayReader in = new CharArrayReader(buf);
    BufferedReader f = new BufferedReader(in);
    int c, d = 0;
    f.(2); while ((c = f.read()) != -1) {
    System.out.println(c);
    d++;
    if (d == 2) {
    break;
    }
    }
    System.out.println("d = " + d);
    f.reset(); while ((c = f.read()) != -1) {
    System.out.println(c);
    d++;
    }
    }