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