Un flujo es una secuencia de datos. I/O Stream se refiere a un flujo que es poco probable que sea un método para acceder secuencialmente a un archivo. Flujo de E/S significa una fuente de entrada o un destino de salida que representa diferentes tipos de fuentes, por ejemplo, archivos de disco. El paquete java.io proporciona clases que le permiten convertir flujos de caracteres Unicode y flujos de bytes de texto que no es Unicode.
- Flujo de entrada: lee datos de la fuente.
- Flujo de salida: escribe datos en un destino.
¿Cuándo usar el flujo de caracteres sobre el flujo de bytes?
En Java, los caracteres se almacenan mediante convenciones Unicode. El flujo de caracteres es útil cuando queremos procesar archivos de texto. Estos archivos de texto se pueden procesar carácter por carácter. El tamaño de los caracteres suele ser de 16 bits.
¿Cuándo usar Byte Stream sobre Character Stream?
Byte orientado lee byte por byte. Un flujo de bytes es adecuado para procesar datos sin procesar como archivos binarios.
Los puntos clave al usar y manejar cualquiera de los flujos anteriores son los siguientes:
- Los nombres de los flujos de caracteres normalmente terminan con Reader/Writer y los nombres de los flujos de bytes terminan con InputStream/OutputStream.
- Los flujos utilizados en los códigos de ejemplo son flujos sin búfer y menos eficientes. Por lo general, los usamos con lectores/escritores almacenados en búfer para mayor eficiencia. Pronto discutiremos el uso de las clases BufferedReader/BufferedWriter (para el flujo de caracteres) y BufferedInputStream/BufferedOutputStream (para el flujo de bytes).
- Siempre se recomienda cerrar la transmisión si ya no está en uso. Esto asegura que las transmisiones no se verán afectadas si ocurre algún error.
- Es posible que los códigos anteriores no se ejecuten en compiladores en línea, ya que es posible que los archivos no existan.
Flujo de caracteres
En Java, los caracteres se almacenan mediante convenciones Unicode . El flujo de caracteres automáticamente nos permite leer/escribir datos carácter por carácter. Por ejemplo, FileReader y FileWriter son secuencias de caracteres que se utilizan para leer desde el origen y escribir en el destino.
Ejemplo
Java
// Java Program illustrate Reading // a File in Human Readable // Format Using FileReader Class // Importing required classes import java.io.*; // Main class public class GFG { // Main driver method public static void main(String[] args) throws IOException { // Initially assiging null as we have not read // anything FileReader sourceStream = null; // Try block to check for exceptions try { // Reading from file sourceStream = new FileReader( "/Users/mayanksolanki/Desktop/demo.rtf"); // Reading sourcefile and writing content to // target file character by character. int temp; // If there is content inside file // than read while ((temp = sourceStream.read()) != -1) System.out.println((char)temp); // Display message for successfu execution of program System.out.print("Program successfully executed"); } // finally block that executes for sure // where we are closing file connections // to avoid memory leakage finally { // Closing stream as no longer in use if (sourceStream != null) sourceStream.close(); } } }
Salida: escribe contenido en el archivo de destino carácter por carácter
Program successfully executed
Flujo de bytes
Los flujos de bytes procesan los datos byte a byte (8 bits). Por ejemplo, FileInputStream se usa para leer desde el origen y FileOutputStream para escribir en el destino.
Ejemplo:
Java
// Java Program Illustrate ByteStream Class to // Copy Contents of One File to Another File // Importing required classes import java.io.*; // Main class public class GFG { // Main driver method public static void main(String[] args) throws IOException { // Initially assigning null ot objects for // reading and writing to file FileInputStream sourceStream = null; FileOutputStream targetStream = null; // Try block to check for exceptions try { // Passing the files via lcoal directory sourceStream = new FileInputStream( "/Users/mayanksolanki/Desktop/demo.rtf"); targetStream = new FileOutputStream( "/Users/mayanksolanki/Desktop/democopy.rtf"); // Reading source file and writing content to // target file byte by byte int temp; // If there is content inside file // than read while ((temp = sourceStream.read()) != -1) targetStream.write((byte)temp); // Display message for successfu execution of program System.out.print("Program successfully executed"); } // finally block that executes for sure // where we are closing file connections // to avoid memory leakage finally { if (sourceStream != null) sourceStream.close(); if (targetStream != null) targetStream.close(); } } }
Producción:
Program successfully executed
Este artículo es una contribución de Mohit Gupta . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente.
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA