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と同じです
例:
//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;
}
}
}