#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:
Поток вывода данных позволяет приложению записывать примитивные типы данных Java в поток вывода переносимым способом. Затем приложение может использовать поток ввода данных для обратного считывания данных.
Выводит форматированные представления объектов в текстовый поток вывода.
Все это просто байты, но они представляют разные вещи. С помощью a DataOutpuStream
вы получаете байты, которые вы можете прочитать обратно непосредственно в свой примитивный тип Java int
, тогда как с помощью a PrintWriter
вы этого не делаете.
Ответ №3:
возможно, повторяя то, что уже было сказано, но просто для того, чтобы сделать это более явным:
когда вы используете программу printwriter и говорите, что у вас есть значение int, равное 65, программа printwriter напечатает 2 символа: ‘6’ и ‘5’
когда вы используете outputstream, он печатает байты, поэтому он запишет в файл байт со значением 65 — это код символа в ASCII / UTF-8 для ‘A’, поэтому, если вы откроете файл в текстовом редакторе, вы увидите символ «A», а не ‘6’, за которым следует ‘5’, как указано выше.