Pregunta

¿Cuál es la diferencia entre el lector y InputStream? Y cuándo usar qué? Si puedo utilizar Reader para leer caracteres por eso voy a utilizar InputStream, supongo que para leer objetos?

¿Fue útil?

Solución

Una InputStream es el método prima de obtener información de un recurso. Se agarra el byte a byte de datos sin realizar ningún tipo de traducción. Si está leyendo datos de la imagen, o cualquier archivo binario, esto es la corriente a su uso.

Un lector está diseñado para los flujos de caracteres. Si la información que está leyendo es todo el texto, entonces el lector se hará cargo del personaje decodificación para usted y le dan caracteres Unicode de la corriente de entrada sin procesar. Si está leyendo cualquier tipo de texto, esto es la corriente a su uso.

Usted puede envolver un InputStream y convertirlo en un lector utilizando la clase InputStreamReader.

Reader reader = new InputStreamReader(inputStream, StandardCharsets.UTF_8);

Otros consejos

InputStreams se utiliza para leer los bytes de un arroyo. Por lo que son útiles para datos binarios, tales como imágenes, vídeo y objetos serializados.

Los lectores, por otro lado son streams de caracteres por lo que son los más utilizados para leer los datos de caracteres.

supongo que la fuente de confusión es que retornos InputStream.read() un int y Reader.read() también devuelve un int.

La diferencia es que los valores de byte de retorno InputStream.read() entre 0 y 255 correspondientes a los contenidos en bruto de la corriente de bytes y Reader.read() devuelven el valor de carácter que está entre 0 y 65357 (porque hay 65358 diferentes puntos de código Unicode)

Una InputStream le permite leer el contenido byte a byte, por ejemplo, los contenidos "un ‡ a" se lee como una corriente de 5 bytes, es decir, 97, 226, 128, 161 y 97 donde a -> U+0061 -> 0x61 -> 97 y ‡ -> U+2021 -> 0xE280A1 (utf-8 encoding of 0x2021) -> 226 128 161.

A Reader le permite leer el contenido del carácter por carácter por lo que los contenidos "un ‡ a" se leen como 3 caracteres 97, 8225 y 97 donde a -> U+0061 -> 0x61 -> 97 y ‡ -> U+2021 -> 0x2021 -> 8225.

Uno acepta bytes y el otro acepta caracteres.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top