Phương thức mark()
và reset()
hoạt động chính xác như thế nào (trong mã bên dưới), từng bước? Tôi cố gắng viết ví dụ của riêng mình nhưng bắt đầu ném ngoại lệ sai hoặc tương tự như vậy, và tôi không thể hiểu được điểm đặt dấu và đặt lại phương thức trong mã này là gì bởi vì tôi không thấy sự khác biệt với điều này hay không.InputStream, đánh dấu(), đặt lại()
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);
}
}
}
Ngoại lệ nào đang được ném? Bạn có theo dõi ngăn xếp không? Xin vui lòng, cụ thể hơn về câu hỏi của bạn. – Lion
Trường hợp ngoại lệ được ném là 'Lỗi I/O: java.io.IOException: Đặt lại thành dấu không hợp lệ', nhưng tôi đã viết ngoại lệ đó đang được ném vào một ví dụ khác. Chủ yếu là tôi hỏi những gì là đánh dấu (32) và thiết lập lại làm trong ** ví dụ này **. – ashur
@ user1165499 Xem câu trả lời của tôi để biết chi tiết về cách mã này hoạt động và những gì tôi nghi ngờ vấn đề là, trong ví dụ khác của bạn. – dan