2011-08-08 13 views
13

Todavía soy relativamente nuevo en los sockets, y no he visto ninguna información sobre este tema.Sockets de Java: DataOutputStream o OutputStream?

escribir en un conector conectado, puede utilizar

socket.getOutputStream().write 

o crear una nueva DataOutputStream de la toma de OutputStream y escribir en eso.

  • ¿Qué se considera "buena práctica", utilizando un DataOutputStream o OutputStream? La mayoría de the examples Encuentro en Internet el uso de DataOutputStream (para enviar cadenas, como en un chat bidireccional).
  • ¿Existen ventajas o desventajas en el uso de DataOutputStream sobre OutputStream?
  • ¿Hay alguna diferencia en el rendimiento que se nota entre estos dos cuando, por ejemplo, el envío de archivos?

Respuesta

10

DataOutputStream asegura que los datos están formateados de una manera independiente de la plataforma. Este es el gran beneficio. Se asegura de que la parte del otro lado pueda leerlo. No hay una diferencia de rendimiento significativa entre ambos.

Debe usar OutputStream solo si transfiere datos binarios en bruto.

+0

¿Qué sugeriría si desea crear una aplicación java independiente de la plataforma que pueda enviar archivos? – David

+0

Incluso si los archivos solo contienen bytes sin procesar, aún puede enviarlos con DataOutputStream, por lo que elegiría DataOuputStream en todos los casos. – JVerstry

+0

'DataOutputStream' only 'se asegura de que los datos estén formateados de forma independiente de la plataforma si usa las API adicionales que proporciona. Sus métodos 'write()' no tienen propiedades mágicas. Si solo los usa, (a) no hay diferencia de rendimiento, y (b) no tiene sentido utilizar 'DataOutputStream' en absoluto. Si está utilizando las API adicionales, no hay nada con qué comparar su rendimiento. Entonces la declaración sobre las diferencias de rendimiento básicamente no tiene sentido. – EJP

2

Use DataOutputStream si necesita las API adicionales. Si no lo haces, no tiene sentido. Pero siempre debe envolver el flujo de salida del zócalo en un BufferedOutputStream si está realizando escrituras pequeñas, y flush() cuando corresponda, es decir, antes de leer el zócalo, por ejemplo.

-1

Justo ahora he llegado a conocer la diferencia entre dataoutputstream y outputstreamwriter mientras trabajo con un servicio SOAP ... Intenté pasar datos árabes a través de solicitud XML pero en el XML de respuesta obtengo algunos caracteres basura en lugar de árabe Entonces intenté codificar (UTF-8) la solicitud, pero no hay ningún método para codificar en DataOutputStream, ya que puede codificar la solicitud en OutputStreamWriter antes de enviar la solicitud. OutputStreamWriter out = new OutputStreamWriter (con.getOutputStream(), "UTF-8"); out.write (inputXML);

Cuestiones relacionadas