Es scheint, dass Files.newBufferedReader()
strenger ist über UTF-8 als die naive Alternative.Unterschiedliche Ergebnisse Lesen der Datei mit Files.newBufferedReader() und den Bau Leser direkt
Wenn ich eine Datei mit einem einzigen Byte 128 --- so erstellen, keine gültiges UTF-8-Zeichen --- es wird gerne gelesen werden, wenn ich ein BufferedReader
auf einer auf dem Ergebnis der Files.newInputStream()
InputStreamReader
konstruieren, aber mit Files.newBufferedReader()
wird eine Ausnahme ausgelöst.
Dieser Code
try (
InputStream in = Files.newInputStream(path);
Reader isReader = new InputStreamReader(in, "UTF-8");
Reader reader = new BufferedReader(isReader);
) {
System.out.println((char) reader.read());
}
try (
Reader reader = Files.newBufferedReader(path);
) {
System.out.println((char) reader.read());
}
hat dieses Ergebnis:
�
Exception in thread "main" java.nio.charset.MalformedInputException: Input length = 1
at java.nio.charset.CoderResult.throwException(CoderResult.java:281)
at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339)
at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
at java.io.InputStreamReader.read(InputStreamReader.java:184)
at java.io.BufferedReader.fill(BufferedReader.java:161)
at java.io.BufferedReader.read(BufferedReader.java:182)
at TestUtf8.main(TestUtf8.java:28)
Ist dies dokumentiert? Und ist es möglich, das milde Verhalten mit Files.newBufferedReader()
zu bekommen?
Wilder stab im Dunkel, aber haben Sie versucht charset in dem Anruf newBufferedReader Angabe? – JustinKSU
@JustinKSU Er sollte nicht müssen. Diese Methode ist [dokumentiert] (http://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#newBufferedReader-java.nio.file.Path-), wenn UTF verwendet wird. 8. – VGR