エラーメッセージでこの例外も発生しました。
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」キャストを記述します。
//key is of generic type <Key extends Comparable<Key>>
writer.write(item.getKey() + "\t" + item.getValue() + "\n");
この文字列は長さが9で、次のコードポイントを持つ文字が含まれています。
111 114 97 122103 9 53 52 10
ただし、クラスのBufferedWriterが次のように置き換えられた場合:
FileOutputStream outputStream = new FileOutputStream(filePath);
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(outputStream));
例外なくこの文字列を正常に書き込むことができます。また、同じ文字列を文字から作成しても、問題なく動作します。
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
うまくいかないのか、まだわかりません。