2011-03-07 18 views
19

Estoy diseñando una biblioteca en la que una clase debería tener la capacidad de poder convertirse internamente en texto. ¿Qué clase debo usar: OutputStream o Writer? ¿Y cuál es la diferencia clave entre ellos (en mi caso)?Writer o OutputStream?

public interface Memento { 
    void save(OutputStream stream); 
    void save(Writer writer); 
} 

¿Cuál?

+2

Los escritores/lectores se ocupan de los datos de caracteres y los flujos tratan con datos binarios. – asgs

+0

@asgs Despejó mis dudas en una oración simple. Gracias jaja – CapturedTree

Respuesta

23

Un OutputStream es una secuencia orientada a bytes. Cualquier texto que escriba debe codificarse como bytes utilizando alguna codificación (más comúnmente ISO-8859-1 o UTF-8). A Writer es una secuencia orientada a caracteres que puede o no codificar internamente caracteres como bytes, dependiendo de lo que está escribiendo.

EDITAR Si está diseñando una biblioteca, a continuación, si se proporciona una interfaz -oriented OutputStream texto al que se va a escribir, que realmente debería ofrecer clases de cliente la capacidad de controlar la codificación a utilizar.

15

¿Texto? Writer. Está destinado para el manejo de caracteres, codificación de honores.

Stream/array of bytes? OutputStream. Funciona en bytes sin procesar, no tiene noción de caracteres, codificaciones, cadenas, etc.

+0

y ¿qué hay de 'OutputStreamWriter'? ¿se usa para convertir el byte a charset? – UnKnown

+1

@UnKnown - Un 'OutputStreamWriter' es un' Writer' que usa 'OutputStream' como destino. Al escribir texto, se convertir los caracteres en bytes utilizando cualquier codificación especificada en la construcción de la 'OutputStreamWriter' (o una codificación predeterminada que depende de la plataforma). Para convertir bytes a caracteres, usaría un 'Reader'. –

Cuestiones relacionadas