Gyakorlati alapok II.
Bemenet - kimenet
A könyvjelző (mark)
Némelyik input-output-osztály támogatja az úgynevezett könyvjelző-(mark)-mechanizmust. Ez a rutin néhány, legutoljára beolvasott adategység újrabeolvasását biztosítja azáltal, hogy a mark() metódus meghívása utáni adatok egy dedikált memóriaterületre mentődnek el és onnan visszaállíthatók a reset() metódus későbbi meghívásával.
Megfontolandó korlátot jelent azonban, hogy a mark() utáni állapotmentésnek nyilvánvalóan vannak memóriakorlátai, amelyet a mark() metódus paramétereként kell megadnunk, például mark(1000). Ebben az esetben az 1000 érték a mark() és reset() metódusok közti maximális adatmennyiség. Túllépése esetén a könyvjelző érvénytelenné válik, a reset() metódus meghívása IOException kivételt eredményez.
Arról, hogy adott osztály támogatja-e a könyvjelző-mechanizmust, a markSupported() metódus true vagy false visszatérési értéke tájékoztat minket.
Az alábbi futtatható Java-kódban a mark()-reset() rutin csakis akkor fut le, ha az osztály támogatja a könyvjelző-mechanizmust (if(br.markSupported())). A könyvjelzőt a 2. sor előtt hívtuk meg, amely által ettől a ponttól kezdve tárolódnak a további adatok.
A reset() metódus meghívása miatt a visszaolvasott adatok a 2. sortól kezdődnek.
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new StringReader(
"1. sor\n"
+ "2. sor\n"
+ "3. sor\n"
+ "4. sor"));
if(br.markSupported()){
System.out.println(br.readLine());
br.mark(1000);
System.out.println(br.readLine());
System.out.println(br.readLine());
System.out.println(br.readLine());
br.reset();
System.out.println(br.readLine());
System.out.println(br.readLine());
System.out.println(br.readLine());
br.close();
}
}
}
Végeredmény:
1. sor
2. sor
3. sor
4. sor
2. sor
3. sor
4. sor
Egy másik, szintén plasztikus példa:
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new StringReader(
"1. sor\n"
+ "2. sor\n"
+ "3. sor\n"
+ "4. sor"));
if(br.markSupported()){
System.out.println(br.readLine());
br.mark(1000);
System.out.println(br.readLine());
System.out.println(br.readLine());
System.out.println(br.readLine());
System.out.println(br.readLine());
System.out.println(br.readLine());
br.reset();
System.out.println(br.readLine());
System.out.println(br.readLine());
System.out.println(br.readLine());
br.close();
}
}
}
Végeredmény:
1. sor
2. sor
3. sor
4. sor
null
null
2. sor
3. sor
4. sor