2015-01-10 4 views

ответ

1

DataOutputStream относится к классам OutputStream для записи двоичных данных - не Writer для текста, Это старый класс и writeBytes(String) является странным способом щебетать как это:

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

Итак, из каждого символа Юникода UTF-16 (16 бит) берется младший байт. Если строка ограничена 7-битным ASCII, может быть, бит ISO-8859-1, строка не искажается. Но в целом информация теряется.

В DataInputStream нет данных, String readBytes().

Я бы назвал это дизайн неудача, так как Java представил separatation из текста и двоичных данных (byte[]), представляя byte и резервирование String и 16-битные char для текста Unicode. Вероятно, автор почувствовал потребность в стиле C write(char*).

Не нужно упоминать writeUTF и DataInputStream.readUTF.

1

write() записывает в поток byte[], тогда как writeBytes() записывает вывод yourString.getBytes() в поток. Если бы нам понадобилась строка из byte[], мы могли бы String yourString = new String(yourByteArray);

Как вы можете видеть с помощью String, это не имеет большого значения, какой подход мы используем, мы можем преобразовать его в правильный объект.

Однако, что, если вы хотите отправить двоичные данные? Вероятно, у вас есть byte[] или ByteArrayOutputStream, которые вы можете использовать для прямой записи в поток данных.

-1

В DataOutputStream, в отношении документации оракула (http://docs.oracle.com/javase/7/docs/api/java/io/DataOutputStream.html) не существует какой-либо метод с именем write(String) но только write(byte[]), write(byte[] b, int off, int len) и write(int b). Итак, если у вас есть String, самый простой способ, который вы можете использовать, - writeBytes(String).

Нет никакой разницы между этими методами, используйте только подходящий в соответствии с вашими потребностями (тип объекта, в котором хранятся ваши данные).

Смежные вопросы