Сокеты Java: DataOutputStream или OutputStream? - PullRequest
15 голосов
/ 08 августа 2011

Я все еще относительно новичок в сокетах, и я не видел никакой информации по этому вопросу.

Для записи в подключенный сокет вы можете использовать

socket.getOutputStream().write

Или создайте новый DataOutputStream из сокета OutputStream и напишите в него.

  • Что считается «хорошей практикой» при использовании DataOutputStream или OutputStream? Большинство примеров , которые я нахожу в Интернете, используют DataOutputStream (для отправки строк, например, в двустороннем чате).
  • Есть ли какие-либо преимущества или недостатки использования DataOutputStream по сравнению с OutputStream?
  • Есть ли какая-либо разница в производительности, которая заметна между этими двумя, например, при отправке файлов?

Ответы [ 3 ]

11 голосов
/ 08 августа 2011

DataOutputStream обеспечивает форматирование данных независимо от платформы. Это большая выгода. Это гарантирует, что сторона на другой стороне сможет прочитать это. Между ними нет существенной разницы в производительности.

Вы должны использовать OutputStream только в случае передачи необработанных двоичных данных.

2 голосов
/ 09 августа 2011

Используйте DataOutputStream, если вам нужны дополнительные API.Если нет, то нет смысла.Но вы всегда должны обернуть поток вывода сокета в BufferedOutputStream, если вы делаете небольшие записи, и flush(), когда это уместно, то есть, прежде чем читать сокет, например.

0 голосов
/ 20 декабря 2017

Только сейчас я узнал разницу между dataoutputstream и outputtreamwriter при работе со службами SOAP ... Я пытался передавать арабские данные через XML-запрос, но в XML-ответе вместо арабских данных я получаю некоторые ненужные символы затем я попытался закодировать (UTF-8) запрос, но в DataOutputStream не существует такого метода для кодирования, где вы можете кодировать запрос в OutputStreamWriter перед отправкой запроса. OutputStreamWriter out = new OutputStreamWriter (con.getOutputStream (), "UTF-8"); out.write (inputXML);

...