【发布时间】:2023-04-09 06:38:01
【问题描述】:
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);
}
}
}
【问题讨论】:
-
抛出了什么异常?你有堆栈跟踪吗?请更具体地说明您的问题。
-
被抛出的异常是
I/O Error: java.io.IOException: Resetting to invalid mark,但是我写了那个异常被抛出另一个例子。我主要是问 this example 中的 mark(32) 和 reset 是什么。 -