또한 오류 메시지와 함께이 예외가 발생했습니다.
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입니다.
111114 97122103 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
작동 하지 않는지 모르겠습니다 .