Ввод и вывод Java

#java #fileoutputstream #filewriter #dataoutputstream

#java #поток вывода файла #filewriter #поток вывода данных

Вопрос:

Объясните разницу между выводами следующих двух фрагментов кода для вывода int i в файл:

я)

 PrintWriter outfile = new PrintWriter(new FileWriter("ints.txt"));
outfile.print(i);
  

ii)

 DataOutputStream out = new DataOutputStream(new FileOutputStream("ints.dat"));
out.writeInt(i);
  

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

Что бы вы еще добавили?

Комментарии:

1. Звучит как домашнее задание. Если это так, пожалуйста, пометьте его соответствующим образом.

Ответ №1:

Файлы содержат только байты, поэтому в конечном итоге все получается в виде байтов.

Строка уже является потоком символов. Когда вы записываете строку в файл, он должен превратить ее в поток байтов.

Значение int равно четырем байтам. writeInt() преобразует его в большое конечное число.

Ответ №2:

Из DataOutputStream javadoc:

Поток вывода данных позволяет приложению записывать примитивные типы данных Java в поток вывода переносимым способом. Затем приложение может использовать поток ввода данных для обратного считывания данных.

Из PrintWriter javadoc

Выводит форматированные представления объектов в текстовый поток вывода.

Все это просто байты, но они представляют разные вещи. С помощью a DataOutpuStream вы получаете байты, которые вы можете прочитать обратно непосредственно в свой примитивный тип Java int , тогда как с помощью a PrintWriter вы этого не делаете.

Ответ №3:

возможно, повторяя то, что уже было сказано, но просто для того, чтобы сделать это более явным:

когда вы используете программу printwriter и говорите, что у вас есть значение int, равное 65, программа printwriter напечатает 2 символа: ‘6’ и ‘5’

когда вы используете outputstream, он печатает байты, поэтому он запишет в файл байт со значением 65 — это код символа в ASCII / UTF-8 для ‘A’, поэтому, если вы откроете файл в текстовом редакторе, вы увидите символ «A», а не ‘6’, за которым следует ‘5’, как указано выше.