Почему out.write () изменяет значения int в Java? - PullRequest
1 голос
/ 22 февраля 2012

Я пытаюсь вывести некоторые данные в файл на Java и не понимаю, почему, когда я запускаю этот код ...

try {
    File file = new File("demo.txt");
    BufferedWriter out = new BufferedWriter(new FileWriter(file));
    int i = 127;
    int j = 128;
    System.out.println(Integer.toHexString(i));
    System.out.println(Integer.toHexString(j));
    out.write(i);
    out.write(j);
    out.close();
} catch (IOException e) {}   

... в журнал консоли выводится следующее:

7f
80

но когда я открываю файл demo.txt с помощью шестнадцатеричного редактора, я вижу байты 7f и 3f. Почему out.write () правильно выводит большинство значений типа int (пример 127), но изменяет другие (пример 128)? Как я могу записать данные в файл прямо?

1 Ответ

3 голосов
/ 22 февраля 2012

FileWriter должен использоваться для записи символьных потоков. Если вы пытаетесь записать двоичные данные, тогда подходит FileOutputStream. Если вы замените FileWriter на FileOutputStream, а BufferedWriter на BufferedOutputStream, вы обнаружите, что данные записаны так, как вы ожидаете.

FileWriter поддерживает символы и кодировки, что означает, что он может преобразовывать данные, которые вы передаете через него, в соответствии с кодировкой символов. Но, честно говоря, я не знаю точно, что здесь происходит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...