看起来Files.newBufferedReader()对于UTF-8比对天真的替代方案更严格.
如果我创建一个单字节128的文件—所以,不是一个有效的UTF-8字符—如果我在Files.newInputStream()的结果上在InputStreamReader上构造一个BufferedReader,那么很高兴会被读取,但是Files.newBufferedReader()抛出异常.
这段代码
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());
}
有这个结果:
�
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)
这记录了吗?是否可以使用Files.newBufferedReader()获得宽松的行为?