from create bytes array java file inputstream filereader fileinputstream

java - create - ¿Cuál es la diferencia entre Reader y InputStream?



java file get byte (4)

¿Cuál es la diferencia entre Reader y InputStream? ¿Y cuándo usar qué? Si puedo usar Reader para leer los caracteres, ¿por qué usaré inputstream, supongo que para leer objetos?


InputStreams se utilizan para leer bytes de una secuencia. Por lo tanto, son útiles para datos binarios, como imágenes, video y objetos serializados.

Los lectores, por otro lado, son secuencias de caracteres, por lo que se usan mejor para leer datos de caracteres.


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

La diferencia es que InputStream.read() devuelve valores de bytes entre 0 y 255 correspondientes a los contenidos brutos de la secuencia de bytes y Reader.read() devuelve el valor del carácter que está entre 0 y 65357

Un InputStream permite leer el contenido byte por byte, por ejemplo los contenidos "a ‡ a" se leen como 97, 226, 128, 161, 97 donde a -> U+0061 -> 0x61 -> 97 y ‡ -> U+2021 -> 0xE280A1 (utf-8 encoding of 0x2021) -> 226 128 161 .

Un Reader permite leer el contenido carácter por carácter para que el contenido "a ‡ a" se lea como 97, 8225, 97 donde a -> U+0061 -> 0x61 -> 97 y ‡ -> U+2021 -> 0x2021 -> 8225 .


Un InputStream es el método sin procesar para obtener información de un recurso. Captura el byte de datos por byte sin realizar ningún tipo de traducción. Si está leyendo datos de imágenes, o cualquier archivo binario, esta es la secuencia que debe usar.

Un lector está diseñado para secuencias de caracteres. Si la información que está leyendo es todo texto, entonces el Reader se encargará de la decodificación del personaje y le dará caracteres Unicode del flujo de entrada sin formato. Si está leyendo cualquier tipo de texto, esta es la secuencia que debe usar.

Puede envolver un InputStream y convertirlo en un Reader utilizando la clase InputStreamReader.

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


Uno acepta bytes y el otro acepta caracteres.