Witam. Dlaczego gdy użyje metody mark() BufferedInputStream po użyciu metody read() to nie można przenieść się do miejsca wskazanego w argumencie mark().
Ten kod działa zgodnie z przewidywaniami:
public static void main(String[] args) throws FileNotFoundException, IOException {
File plik=new File("strumieniebajt.txt");
plik.createNewFile();
BufferedOutputStream zapis=new BufferedOutputStream(new FileOutputStream(plik)); // Zapis do pliku
zapis.write(1);
zapis.write(2);
zapis.write(3);
zapis.close();
BufferedInputStream odczyt = new BufferedInputStream(new FileInputStream(plik));// odczyt z pkiku
odczyt.mark(0); // Gdy metoda jest w tym miejscu wszystko działa poprawnie
System.out.println(odczyt.read());
System.out.println(odczyt.read());
odczyt.reset();
System.out.println(odczyt.read());
}}
Wynikiem jest ciąg "1 2 1" czyli poprawnie.
Kod stwarzający problemy, z użyciem metody mark() już po wywołaniu metody read():
public class Strumienie {
public static void main(String[] args) throws FileNotFoundException, IOException {
File plik=new File("strumieniebajt.txt");
plik.createNewFile();
BufferedOutputStream zapis=new BufferedOutputStream(new FileOutputStream(plik));
zapis.write(1);
zapis.write(2);
zapis.write(3);
zapis.close();
BufferedInputStream odczyt = new BufferedInputStream(new FileInputStream(plik));
System.out.println(odczyt.read());
System.out.println(odczyt.read());
odczyt.mark(0); // Tutaj metoda mark po pierwszył wywołaniu read(), już nie działa metoda reset()
odczyt.reset();
System.out.println(odczyt.read());
Wynikowy ciąg to "1 2 3", tak jak bym w ogóle nie użył metod mark() oraz reset().
Co jest tego przyczyną?