Flujo de caracteres Vs Flujo de bytes en Java

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: 

  1. Los nombres de los flujos de caracteres normalmente terminan con Reader/Writer y los nombres de los flujos de bytes terminan con InputStream/OutputStream.
  2. 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).
  3. 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.
  4. 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.

Character Stream

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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *