write java io writer

outputstream write java



FileInputStream vs FileReader (5)

FileReader rd=new FileReader("new.mp4"); FileWriter wr=new FileWriter("output.mp4"); int ch; while((ch=rd.read())!=-1) wr.write(ch); wr.flush(); wr.close();

Cuando uso FileReader y FileWriter para leer y escribir un archivo mp4, el archivo output.mp4 no se puede representar bien. Pero cuando uso FileInputStream y FileOutputStream , funcionó bien.

Entonces, ¿puedo concluir que FileReader y FileWriter son solo para leer y escribir texto?



Sí, su conclusión es que las subclases correctas de Reader y Writer son para leer / escribir contenido de texto. InputStream / OutputStream son para contenido binario. Si echas un vistazo a la documentación:

Reader - Clase de resumen para leer secuencias de caracteres

InputStream : la clase abstracta es la superclase de todas las clases que representa una secuencia de entrada de bytes.


Se puede leer un archivo de texto usando fileReader y fileInputStream pero mp3 y png solo se pueden leer usando fileInputStream

  1. fileReader lee char por char

  2. fileInputStream lee byte por byte


FileInputStream se utiliza para leer secuencias de bytes de datos sin FileInputStream , como imágenes sin FileInputStream . FileReaders , por otro lado, se utilizan para leer secuencias de caracteres

La diferencia entre FileInputStream y FileReader es que FileInputStream lee el byte del archivo por byte y FileReader lee el archivo carácter por carácter.

Por lo tanto, cuando intente leer el archivo que contiene el carácter "Č" , en FileInputStream dará el resultado como 196 140 , porque el valor ASCII de Č es 268 .

En FileReader dará el resultado como 268 que es el valor ASCII del char Č .


FileReader (y de hecho cualquier extensión de Reader) es de hecho para texto . De la documentación de Reader :

Clase abstracta para leer secuencias de caracteres .

(Énfasis mío). Mire la API y verá que todo tiene que ver con el texto: char lugar de byte todo el lugar.

InputStream y OutputStream son para datos binarios, como archivos mp4.

Personalmente, evitaría el FileReader conjunto, ya que siempre usa la codificación de caracteres predeterminada del sistema. En su lugar, use InputStreamReader en un FileInputStream ... pero solo cuando desee tratar con texto.

Como un lado, esa es una forma muy ineficiente de copiar desde una entrada a una salida ... use las sobrecargas de read y write que leen o escriben desde un búfer, ya sea un byte[] o un char[] . De lo contrario, está llamando a leer y escribir para cada byte / carácter en el archivo.

También debe cerrar flujos de IO en bloques finally para que estén cerrados incluso si se lanza una excepción mientras los está procesando.