Primero, permítanme introducir la diferencia entre InputStreamReader y FileReader. El contenido específico es el siguiente:
InputStreamReader y BufferedReader. La clase más importante entre ellos es InputStreamReader, que es el puente para convertir bytes en caracteres. Puede volver a especificar el método de codificación en el constructor. Si no se especifica, se adoptará el método de codificación predeterminado del sistema operativo subyacente, como GBK, etc.
FileReader y InputStreamReader implican la conversión de codificación (especifique el método de codificación o use la codificación predeterminada del sistema operativo), ¡y el código confuso puede ocurrir en diferentes plataformas! FileInputStream se procesa en modo binario y no tendrá código confundido.
FileInputStream Byte Streams se lee byte byte.
Las transmisiones de personajes de FileReader se leen como caracteres uno por uno.
BufferedReader bufReader = null; inputStreamReader isr = null; filereader fr = null; try {for (string fileName: fileNames) {método 1: isr = new inputStreamReader (new FileInputStream ("d: /test.txt"), "utf-8"); bufReader = new BufferedReader (ISR); Método 2: FR = nuevo FileReader ("D: /Test.txt"); bufReader = new BufferedReader (FR); while (bufReader.ready ()) {// 1. Obtenga cada fila de cadena de datos dataLine = bufReader.readline (); }}La diferencia entre InputStream y Reader
Hay dos clases abstractas debajo de Java.io: InputStream y Reader
InputStream es una superclase que representa todas las clases de una secuencia de entrada de bytes.
El lector es una clase abstracta para leer transmisiones de personajes
InputStream proporciona lectura de transmisiones de bytes, no lectura de texto, que es la diferencia fundamental entre TI y la clase de lector.
Es decir, la matriz o cadena de char se lee usando el lector, y la matriz de bytes se lee usando InputStream.
Después de aclarar la diferencia fundamental entre las dos superclase, veamos el uso de sus subclases a continuación. Estas son solo algunas de las explicaciones más utilizadas.
InputStream
| __FileInputStream
FileInputStream obtiene bytes de entrada de un archivo en el sistema de archivos.
Resumen de métodos de construcción
FileInputStream (archivo de archivo)
Cree un FileInputStream abriendo una conexión al archivo real, que se especifica mediante el archivo de objeto de archivo en el sistema de archivos.
FileInputStream (FileDescriptor FDOBJ)
Cree un FileInputStream utilizando el descriptor de archivo FDOBJ, que representa una conexión existente a un archivo real en el sistema de archivos.
FileInputStream (nombre de cadena)
Cree un FileInputStream abriendo una conexión al archivo real, especificado por el nombre de PathName en el sistema de archivos.
Lector
| --RafriedReader
| ___ InputStreamReader
| __Filerader
BufferedReader: lea el texto de una transmisión de entrada de caracteres y amortigua caracteres individuales, lo que permite una lectura eficiente de caracteres, matrices y líneas.
Resumen de métodos de construcción
BufferedReader (lector en)
Crea una secuencia de entrada de caracteres almacenado que usa el búfer de entrada de tamaño predeterminado.
BufferedReader (lector en, int sz)
Crea un flujo de entrada de caracteres amortiguado que usa el búfer de entrada de tamaño especificado.
BufferedReader (plataforma Java SE 6)
La característica más importante de BufferedReader es la configuración del búfer. Por lo general, cada solicitud de lectura realizada por el lector dará como resultado las solicitudes de lectura correspondientes para el carácter subyacente o la secuencia de bytes. Si no hay almacenamiento en búfer, cada llamada a Read () o Readline () dará como resultado que se lean bytes del archivo y lo conviertan en caracteres y lo devuelvan, lo cual es extremadamente ineficiente.
Use el BufferedReader para especificar el tamaño del búfer, o se puede usar el tamaño predeterminado. En la mayoría de los casos, el valor predeterminado es lo suficientemente grande.
Por lo tanto, se recomienda envolver a todos los lectores cuyas operaciones Read () pueden ser costosas (como FileReader e InputStreamReader) con BufferedReader.
Por ejemplo,
BufferedReader in = new BufferedReader (new FileReader ("foo.in"));Entrada de búfer al archivo especificado.
InputStreamReader (plataforma Java SE 6)
InputStreamReader es el puente entre las transmisiones de bytes y las secuencias de caracteres: lee bytes usando el charset especificado y los decodifica en caracteres. El conjunto de caracteres que utiliza se puede especificar o explícitamente por el nombre, o puede aceptar el conjunto de caracteres predeterminado de la plataforma.
Resumen de métodos de construcción
InputStreamReader (InputStream in) crea un InputStreamReader que usa el conjunto de caracteres predeterminado. InputStreamReader (InputStream in, Charset CS) crea un InputStreamReader que usa el conjunto de caracteres dado. InputStreamReader (InputStream in, CharsetDecoder DEC) crea un InputStreamReader que usa el decodificador de conjunto de caracteres dado. InputStreamReader (InputStream in, String CharSetName) crea un InputStreamReader que usa el conjunto de caracteres especificado.
Cada llamada a un método Read () en el InputStreamReader da como resultado que se lean uno o más bytes de la secuencia de entrada subyacente. Para habilitar una conversión efectiva de byte a carácter, puede leer más bytes del flujo subyacente con anticipación, excediendo los bytes requeridos para satisfacer la operación de lectura actual.
Para lograr la máxima eficiencia, considere envolver el InputStreamReader dentro del BufferedReader. Por ejemplo:
BufferedReader in = new BufferedReader (new InputStreamReader (System.in));
La característica más importante de InputStreamReader es que puede referirse al formato de codificación fijo de la conversión, que no es posible con otras clases. Se puede ver desde el método de construcción. Esto es muy útil al leer caracteres chinos.
Filereader
1) Introducción a la clase de FileReader:
Las subclases de la clase InputStreamReader, todos los métodos (Read (), etc.) se heredan de la clase principal InputStreamReader;
2) Diferencias de la clase InputStreamReader:
Resumen de métodos de construcción
FileReader (archivo de archivo)
Cree un nuevo FileReader dado un archivo del que se leen los datos.
FileReader (FileDescriptor FD)
Cree un nuevo FileReader dado un Descractor de archivos desde el cual se leen los datos.
FileReader (nombre de archivo de cadena)
Cree un nuevo FileReader dado el nombre del archivo del que se leen los datos
La principal diferencia entre esta clase y su clase principal InputStreamReader es el constructor, ¡y la principal diferencia es el constructor!
Desde el constructor de InputStreamReader, los parámetros son InputStream y el método de codificación. Se puede ver que cuando desea especificar el método de codificación, se debe usar la clase InputStreamReader; y los parámetros del constructor de FileReader son los mismos que FileInputStream, que es un objeto de archivo o una cadena que representa la ruta. Se puede ver que cuando desea leer un archivo basado en el objeto o cadena de archivo, use FileReader;
Creo que la función de la subclase FileReader se encuentra en esta pequeña división del trabajo. La principal diferencia entre esta clase y su clase principal InputStreamReader es el constructor, ¡y la principal diferencia es el constructor!
De InputStreamReader
En el constructor, los parámetros son InputStream y el método de codificación. Se puede ver que cuando desea especificar el método de codificación, se debe usar la clase InputStreamReader; y los parámetros del constructor de FileReader son los mismos que FileInputStream, que es un objeto de archivo o una cadena que representa la ruta. Se puede ver que cuando desea leer un archivo basado en el objeto o cadena de archivo, use FileReader;
Creo que la función de la subclase FileReader se encuentra en esta pequeña división del trabajo.
Dos conexiones y diferencias
(1) caracteres y bytes:
La clase FileInputStream usa entrada/salida binaria, y la velocidad de E/S es rápida y eficiente, pero su método Read () lee un byte (datos binarios), que es muy desfavorable para que las personas lean, y no puede operar directamente en caracteres en el archivo, como reemplazo y búsqueda (debe operarse en bytes);
La clase del lector compensa este defecto y puede ingresar/salir en formato de texto, que es muy conveniente; Por ejemplo, puede usar el bucle While ((CH = FileReader.read ())! =-1) para leer el archivo; Puede usar el método Readline () de BufferedReader para leer el texto Line by Line.
(2) codificación
InputStreamReader, es el puente para convertir bytes en caracteres. Puede volver a especificar el método de codificación en el constructor. Si no se especifica, se adoptará el método de codificación predeterminado del sistema operativo subyacente, como GBK, etc.
FileReader y InputStreamReader implican la conversión de codificación (especifique el método de codificación o use la codificación predeterminada del sistema operativo), ¡y el código confuso puede ocurrir en diferentes plataformas! FileInputStream se procesa en modo binario y no tendrá código confundido.
Por lo tanto, al especificar el método de codificación, la clase InputStreamReader debe usarse, por lo que es un puente para convertir bytes en caracteres;
(3) Área de caché
La clase de BufferReader se usa para envolver a todos los lectores cuyas operaciones Read () pueden ser costosas (como FileReader y InputStreamReader).
(4) Uso estandarizado
Resume lo anterior y obtenga un mejor uso estándar:
1) archivo de archivo = nuevo archivo ("hello.txt");
FileInputStream in = new FileInputStream (archivo);
2) archivo archivo = nuevo archivo ("hello.txt");
FileInputStream in = new FileInputStream (archivo); InputStreamReader inReader = new InputStreamReader (in, "UTF-8"); BufferedReader bufReader = new BufferedReader (inReader);
3) archivo de archivo = nuevo archivo ("hello.txt");
Filereader filereader = new FileReader (archivo); BufferedReader bufReader = new BufferedReader (FileReader);