W jaki sposób metody mark()
i reset()
działają dokładnie (w kodzie poniżej), krok po kroku? Próbowałem napisać własny przykład, ale zaczyna się wyrzucać wyjątek z niewłaściwego znaku lub podobny do tego i nie mogę zrozumieć, jaki jest sens umieszczania znaczników i resetowania metod w tym kodzie, ponieważ nie widzę różnicy w tym czy nie.InputStream, mark(), reset()
import java.io.*;
class BufferedInputStreamDemo {
public static void main(String args[]) {
String s = "© is a copyright symbol, "
+ "however © isn't.\n";
byte buf[] = s.getBytes();
ByteArrayInputStream in = new ByteArrayInputStream(buf);
int c;
boolean marked = false;
//try_with_resources
try (BufferedInputStream f = new BufferedInputStream(in)) {
while ((c = f.read()) != -1) {
switch (c) {
case '&':
if (!marked) {
f.mark(32);
marked = true;
} else {
marked = false;
}
break;
case ';':
if (marked) {
marked = false;
System.out.print("(c)");
} else
System.out.print((char) c);
break;
case ' ':
if (marked) {
marked = false;
f.reset();
System.out.print("&");
} else
System.out.print((char) c);
break;
default:
if (!marked)
System.out.print((char) c);
break;
}
}
} catch (IOException e) {
System.out.println("I/O Error: " + e);
}
}
}
Jaki wyjątek jest zgłaszany? Czy masz ślad stosu? Proszę, bądź dokładny na swoje pytanie. – Lion
Wyrzucanym wyjątkiem jest 'Błąd we/wy: java.io.IOException: Resetting to invalid mark', ale napisałem, że wyjątek jest zgłaszany w innym przykładzie. Głównie pytam, co to jest znak (32) i resetowanie w ** tym przykładzie **. – ashur
@ user1165499 Zobacz moją odpowiedź, aby dowiedzieć się, jak działa ten kod i podejrzewam, że problem występuje w twoim drugim przykładzie. – dan