我还遇到了带有错误消息的异常,
java.nio.charset.MalformedInputException: Input length = 1
at java.nio.charset.CoderResult.throwException(Unknown Source)
at sun.nio.cs.StreamEncoder.implWrite(Unknown Source)
at sun.nio.cs.StreamEncoder.write(Unknown Source)
at java.io.OutputStreamWriter.write(Unknown Source)
at java.io.BufferedWriter.flushBuffer(Unknown Source)
at java.io.BufferedWriter.write(Unknown Source)
at java.io.Writer.write(Unknown Source)
并发现尝试使用时发生一些奇怪的错误
BufferedWriter writer = Files.newBufferedWriter(Paths.get(filePath));
编写从类中的泛型类型转换的字符串“ orazg 54”。
writer.write(item.getKey() + "\t" + item.getValue() + "\n");
此字符串的长度为9,包含带有以下代码点的字符:
111 114 97 122 103 9 53 52 10
但是,如果将类中的BufferedWriter替换为:
FileOutputStream outputStream = new FileOutputStream(filePath);
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream));
它可以毫无例外地成功写入此String。另外,如果我用字符编写相同的String创建,它仍然可以正常工作。
String string = new String(new char[] {111, 114, 97, 122, 103, 9, 53, 52, 10});
BufferedWriter writer = Files.newBufferedWriter(Paths.get("a.txt"));
writer.write(string);
writer.close();
以前,在使用第一个BufferedWriter编写任何字符串时,我从未遇到过任何异常。这是从java.nio.file.Files.newBufferedWriter(path,options)创建的BufferedWriter发生的奇怪错误。
ISO-8859-1
,效果很好。我认为这是针对欧洲字符的,这很好。不过,我仍然不知道为什么UTF-16
不起作用。