Gyakorlati alapok II.

Bemenet - kimenet

 

A könyvjelző (mark)

 

www.informatika-programozas.hu - Ezt most meg kell tanulni!

 

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.

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

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:

 

www.informatika-programozas.hu - Futtatható Java-kód!

 

 

 

 

 

 

 

 

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