BufferedInputStream#mark(int)
La fonction obtient comme argument la limite des octets qui peuvent être lus, une fois lus, la marque devient invalide.Pourquoi BufferedInputStream # reset() n'a pas levé RuntimeException?
Dans la marque livre OCP (int) est décrit comme:
... vous pouvez appeler marque (int) avec une valeur limite de lecture anticipée. Vous pouvez ensuite lire autant d'octets que vous le souhaitez jusqu'à la valeur limite.
Ainsi, le code ci-dessous met en valeur limite à 1 octet, après avoir lu cet octet, la marque doit être invalidée et appelant la fonction .Reset() devrait lancer une RuntimeException, mais il ne se produit pas. Est-ce la JVM qui est en quelque sorte en train de passer outre l'argument passé pour marquer la fonction?
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());
}
}
Le code à chaque fois imprime les données à partir du fichier échantillon:
A
B
C
called reset
A
B
C
@downcoter Lequel de ces cinq énoncés est incorrect? – EJP