Сокеты Java: DataOutputStream или OutputStream?
Я все еще относительно новичок в сокетах, и я не видел никакой информации по этому вопросу.
Чтобы записать в подключенный сокет, вы можете использовать
socket.getOutputStream().write
Или создайте новый DataOutputStream
из сокета OutputStream
и напишите на него.
- Что считается "хорошей практикой", используя DataOutputStream или OutputStream?
Большинство примеров, которые я нашел в Интернете, используют DataOutputStream (для отправки строк, например, в двухстороннем чате).
- Есть ли какие-либо преимущества или недостатки в использовании DataOutputStream над OutputStream?
- Есть ли разница в производительности, которая заметно между этими двумя, когда, например, отправляет файлы?
Ответы
Ответ 1
DataOutputStream
гарантирует, что данные будут отформатированы независимо от платформы. Это большая выгода. Это гарантирует, что сторона с другой стороны сможет ее прочитать. Между ними нет существенной разницы в производительности.
Вы должны использовать OutputStream
, только если вы передаете необработанные двоичные данные.
Ответ 2
Используйте DataOutputStream
, если вам нужны дополнительные API. Если вы этого не сделаете, нет смысла. Но вы всегда должны обертывать выходной поток сокета в BufferedOutputStream
, если вы делаете небольшие записи, и flush()
, когда это необходимо, например, прежде чем вы прочитаете сокет, например.
Ответ 3
Только сейчас я узнал разницу между dataoutstream и outputstreamwriter при работе с SOAP-сервисами... Я попытался передать арабские данные через XML запроса, но в ответе XML я получаю некоторые нежелательные символы вместо арабских данных то я попытался кодировать (UTF-8) запрос, но нет такого метода для кодирования в DataOutputStream, где вы можете кодировать запрос в OutputStreamWriter перед отправкой запроса.
OutputStreamWriter out = новый OutputStreamWriter (con.getOutputStream(), "UTF-8" );
out.write(inputXML);