2011-01-20 11 views
9

¿Por qué en una instancia de ServletResponse no se pueden llamar getWriter() y getOutputStream()?Servlets en java - getWriter() y getOutputStream()

+0

Podría ser útil explicar por qué quería llamar a ambos en una solicitud de servlet. –

+0

Probablemente Abkutty no desee llamar a ambos, pero el Servlet, el error que maneja el Servlet y algunos filtros intentan escribir resultados, y no coordinan correctamente entre ellos el método que deben usar. – Thilo

+0

Volvería a pensar en por qué quieres tener ambas cosas. –

Respuesta

18

Una decisión de diseño. The Writer y OutputStream mantienen su propio buffer. Si creó uno cada uno, entonces su salida debería fusionarse de alguna manera. Posible, pero más complicado. Entonces decidieron que debes elegir si quieres salida basada en caracteres o salida binaria.

+0

Entonces, ¿por qué no getWriter() devuelve un contenedor en el resultado de getOutputStream()? –

+0

Porque si trataste de escribir en ambos, podrías estropear el resultado debido al almacenamiento en búfer descoordinado. ¿O estás preguntando por qué Writer no expone los métodos de salida binarios de OutputStream? – Thilo

4

Generalmente esto se debe a que getOutputStream() se utiliza para escribir contenido binario, mientras que getWriter() se utiliza para escribir contenido de texto. No tendría sentido escribir ambos en una solicitud de servlet; debería usar uno u otro.

12

Porque Writer es una abstracción de nivel superior que OutputStream. Controla la codificación de caracteres de la secuencia subyacente e incorpora sus propios mecanismos de almacenamiento en búfer.

Si tuviera que escribir directamente en el OutputStream después de usar el Writer, habría un alto riesgo de corrupción de la secuencia subyacente, ya sea por la codificación de caracteres mezclada o la falta de datos almacenados en el búfer.

Para evitar esta confusión, la API de servlet prohíbe el uso de ambos para cualquier respuesta.

Más practicamente, usted usa OutputStream para escribir contenido binario, y Writer para escribir contenido textual.

Cuestiones relacionadas