Я столкнулся с проблемой сериализации и десериализации юникодовых символов. Вот пример программы, которая записывает символ в файл и затем пытается его прочитать. Написанные и прочитанные символы (ch и ch2) различны. Любые предложения, почему я получаю такое поведение?Проблема с сохранением символов в файле
public class MainClass {
public static void main(String[] args) {
try {
File outfile = new File("test.txt");
FileOutputStream fos = new FileOutputStream(outfile);
OutputStreamWriter writer = new OutputStreamWriter(fos, "UTF-16");
FileInputStream fis = new FileInputStream(outfile);
InputStreamReader reader = new InputStreamReader(fis, "UTF-16");
char ch = 56000;
System.out.println(Integer.toBinaryString(ch));
writer.write(ch);
writer.close();
char ch2 = (char) reader.read();
System.out.println(Integer.toBinaryString(ch2));
reader.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
UPD: Эмпирически установлено, что это происходит только для чисел из диапазона 55296-57343.
Что происходит, когда вы открываете входной поток после закрытия выхода? – thejh
Реорганизация строк программы не помогла, поэтому это не является причиной проблемы. – levanovd