se8 java io

se8 - java api 8 bufferedreader



InputStream vs InputStreamReader (6)

¿Cuál es la ventaja de usar InputStream sobre InputStreamReader , o viceversa?

Aquí hay un ejemplo de InputStream en acción:

InputStream input = new FileInputStream("c://data//input-text.txt"); int data = input.read(); while(data != -1) { //do something with data... doSomethingWithData(data); data = input.read(); } input.close();

Y aquí hay un ejemplo del uso de InputStreamReader (obviamente con la ayuda de InputStream):

InputStream inputStream = new FileInputStream("c://data//input.txt"); Reader reader = new InputStreamReader(inputStream); int data = reader.read(); while(data != -1){ char theChar = (char) data; data = reader.read(); } reader.close();

¿El lector procesa los datos de una manera especial?

Solo trato de entender todo el aspecto de los datos de transmisión de i/o en Java.


Bueno, InputStreamReader se usa para leer directamente los caracteres.

Por lo tanto, leerlos como int y luego convertirlos a char no es realmente óptimo.

Esa es la principal diferencia que creo.

InputStream le da los bytes, y el InputStreamReader ya le da caracteres para que lea los 8 InputStream a la vez.

Además, si está leyendo grandes porciones de texto, incluso puede envolver el InputStreamReader en un BufferedReader que le proporciona algunos métodos interesantes para decir, lea líneas completas a la vez.

¿Esto te está ayudando?

También puede leer este artículo: https://docs.oracle.com/javase/tutorial/essential/io/charstreams.html

Aclamaciones,


Desde InputStreamReader javadoc:

Una clase para convertir un flujo de bytes en un flujo de caracteres. Los datos leídos del flujo de entrada de origen se convierten en caracteres ya sea por defecto o por un convertidor de caracteres proporcionado. La codificación predeterminada se toma de la propiedad del sistema "file.encoding". {@code InputStreamReader} contiene un búfer de bytes leídos de la secuencia de origen y los convierte en caracteres según sea necesario.

Para InputStreams, que realmente contiene caracteres en una codificación conocida, use el lector. De lo contrario, solo obtiene los bytes y tendrá que hacer la conversión a char ''a mano''.

La diferencia entre los dos métodos de read :

InputStream::read lee un solo byte y lo devuelve como un int mientras que InputStreamReader::read lee un solo char (respetando la codificación) y lo devuelve como un int .


InputstreamReader se usa para leer los datos de Unicode que no se pueden leer en inputstream.


Representan cosas algo diferentes.

El InputStream es la clase antecesora de todos los flujos de bytes posibles, no es útil por sí mismo, pero todas las subclases (como el FileInputStream que está utilizando) son excelentes para tratar con datos binarios.

Por otro lado, el InputStreamReader (y su Reader padre) se usan específicamente para tratar con caracteres (cadenas), de modo que manejan las codificaciones de caracteres (utf8, iso-8859-1, etc.) con gracia.

La respuesta simple es: si necesita datos binarios, puede usar un InputStream (también uno específico como un DataInputStream ), si necesita trabajar con texto, use un InputStreamReader ..


Si desea leer datos binarios, utilice InputStream.

Si desea leer cadenas de un flujo binario, use InputStreamReader. Uno de sus constructores le permite especificar un conjunto de caracteres.

Por este motivo, no utilice FileReader, ya que utiliza una plataforma predeterminada para un conjunto de caracteres, lo que en muchos casos no es práctico.


InputStream nos ayuda a leer flujos de bytes
mientras que InputStreamReader ayuda a decodificar esos flujos de bytes en flujos de caracteres utilizando algunos conjuntos de caracteres como UTF-8 u otros.
Pero para una mayor eficiencia, la API de Java recomienda usar BufferedReader también junto con InputStream y InputStreamReader