天天看點

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();

  }

 }

}