對於UTF-8,Files.newBufferedReader()
似乎比天真的選擇更爲嚴格。使用Files.newBufferedReader()讀取文件的不同結果並直接構建讀取器
如果我創建一個字節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()
獲得寬大的行爲?
野生刺在黑暗中,但你有沒有試過在newBufferedReader調用指定字符集? – JustinKSU
@JustinKSU他不應該。該方法[記錄](http://docs.oracle.com/javase/8/docs/api/java/nio/file/Files.html#newBufferedReader-java.nio.file.Path-)與使用UTF- 8。 – VGR