天天看点

mark() 和reset的使用



mark(int readlimit)方法表示,标记当前位置,并保证在mark以后最多可以读取readlimit字节数据,mark标记仍有效。如果在mark后读取超过readlimit字节数据,mark标记就会失效,调用reset()方法会有异常。 和缓冲区有关

参看:http://www.cnblogs.com/zhang-qiang/articles/2050885.html

public class BufferedMark {

 public static void main(String [] args) throws Exception{

  File file = new File("E:"+File.separator+"test.txt");

  InputStream in = null;

  in = new FileInputStream(file);

  resetStream(input(in));

 }

 private static BufferedInputStream input(InputStream input) throws Exception{

  BufferedInputStream in = new BufferedInputStream(input,2) ;

  System.out.println("读取..");

  in.mark(3);

  return in;

 }

 private static void resetStream(InputStream input){

  try {

   System.out.println("reset.."+input.markSupported());

   int temp =0;

   byte b[] = new byte[10];

//   while((temp=input.read())!=-1){

//    in.read(b);

    temp = input.read();

    System.out.print((char)temp+".");

    System.out.print((char)input.read()+".");

    System.out.print((char)input.read()+".");

    input.reset();

    System.out.print((char)input.read()+".");

    System.out.print((char)input.read()+".");

//   }

   input.close();

   input.mark(10);

  } catch (IOException e) {

   // TODO Auto-generated catch block

   e.printStackTrace();

  }

 }

}