BufferedInputStream#mark(int)
函数将读取的字节数限制为参数,一旦读取,标记将变为无效。为什么BufferedInputStream#reset()没有抛出RuntimeException?
在OCP书标记(INT)被描述为:
...你可以叫马克(INT)与预读限值。然后您可以根据需要读取尽可能多的字节数,直至达到极限值。
因此,下面的代码将限制值设置为1个字节,读取该字节后,标记应该失效并且调用.reset()函数应抛出RuntimeException,但它不会发生。它是否以某种方式覆盖了传递给标记函数的参数的JVM?
public class Main {
public static void main(String[] args) throws IOException {
Path path = Paths.get("Java8_IOandNIO\\src\\main\\resources\\abcd.txt");
File f = new File(path.toString());
FileInputStream fis = new FileInputStream(f);
BufferedInputStream bis = new BufferedInputStream(fis);
bis.mark(1);
System.out.println((char) bis.read());
System.out.println((char) bis.read());
System.out.println((char) bis.read());
bis.reset();
System.out.println("called reset");
System.out.println((char) bis.read());
System.out.println((char) bis.read());
System.out.println((char) bis.read());
}
}
的代码每次都从样品文件打印数据:
A
B
C
called reset
A
B
C
@downcoter以下哪五项说法不正确? – EJP