JAVA IOでのmark reset


markはブックマークのように、このBufferedReaderに対応するbufferにタグを付け、後でresetを呼び出すとこのmarkが通った場所に戻ることができます.markメソッドにはパラメータがあります.この整数パラメータを通じて、こんなに多くの文字を読み出す前に、このmarkが有効になることを望んでいることをシステムに伝えます.こんなに多くの文字を読んだ後、システムはmarkを有効にしないことができますが、不思議に思ったり、責めたりすることはできません.これはbufferと関係があり、長い距離が必要な場合は、markを維持するために大きなbufferを割り当てなければなりません.   
   //eg.   
   //reader      is      a      BufferedReader   
     
    reader.mark(50);//このmarkは50文字以内で有効であることが要求され、bufferが少なくとも50文字を格納できることが保証されます.
    int      a      =      reader.read();//1文字読みました
    int      b      =      reader.read();//また1文字読みました
     
//いくつかの処理をして、もう一度読む必要があることに気づいた
    reader.reset();   
    reader.read();//読み出された文字はaと同じです
    reader.read();//読み出された文字はbと同じです
例:

public static void main(String[] args) throws IOException {
  String s = "This is a &aa not.
"; byte buf[] = s.getBytes(); ByteArrayInputStream in = new ByteArrayInputStream(buf); BufferedInputStream f = new BufferedInputStream(in); int c; boolean marked = false; while ((c = f.read()) != -1) { switch (c) { case '&': if (!marked) { f.mark(1);// mark marked = true; } else { marked = false; } break; case ' ': if (marked) { f.reset(); System.out.print("&"); } else System.out.print((char) c); break; default: if (marked) System.out.print((char) c); break; } } }