logo

Flujo de caracteres versus flujo de bytes en Java

Un flujo es un flujo continuo de datos. En Java, los flujos de E/S se utilizan para leer desde fuentes de entrada o escribir en destinos de salida, como archivos. Proporcionan una forma de acceder a los datos de forma secuencial. El paquete java.io incluye clases para manejar flujos de bytes y flujos de caracteres y también para realizar conversiones entre ellos.

  • Flujo de entrada: lee datos de la fuente. 
  • Flujo de salida: escribe datos en un destino. 

Cuándo utilizar Character Stream en lugar de Byte Stream:

algoritmo de clasificación rápida

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 utilizar Byte Stream en lugar de Character Stream:

Orientado a bytes lee byte a byte. Un flujo de bytes es adecuado para procesar datos sin procesar, como archivos binarios.

Puntos clave al usar y tratar cualquiera de las corrientes anteriores:

  • Las clases de flujo de caracteres generalmente terminan con Reader/Writer, mientras que las clases de flujo de bytes terminan con InputStream/OutputStream.
  • Los códigos de ejemplo de este artículo utilizan transmisiones sin búfer que son menos eficientes. Para un mejor rendimiento, normalmente los envolvemos con BufferedReader/BufferedWriter (flujos de caracteres) o BufferedInputStream/BufferedOutputStream (flujos de bytes).
  • Cierre siempre las transmisiones después de su uso para liberar recursos y evitar errores.
  • 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 personajes

En Java, los caracteres se almacenan mediante convenciones Unicode. El flujo de caracteres nos permite automáticamente 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.

bytes_no_unicode' title=Flujos de personajes

Ejemplo

Java
import java.io.*; public class GFG {  public static void main(String[] args)  throws IOException  {  // Initially assigning null as we have not read anything  FileReader sourceStream = null;  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);    System.out.print('Program successfully executed');  }    finally {  if (sourceStream != null)  sourceStream.close();  }  } } 

Producción:

lanzar int a cadena

Escribe contenido en el archivo de destino carácter por carácter.

Programa ejecutado exitosamente

Flujo de bytes

Un flujo de bytes en Java es un flujo que maneja la entrada y salida de datos binarios sin formato de 8 bits. Se utiliza principalmente para leer y escribir datos que no son de texto, como imágenes, audio, vídeo o cualquier archivo binario. Por ejemplo flujo de entrada de archivos se utiliza para leer desde el origen y FileOutputStream para escribir en el destino.

Ejemplo:

Java
import java.io.*; public class GFG {  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 {  // Passing the files via local directory  sourceStream = new FileInputStream('/Users/mayanksolanki/Desktop/demo.rtf');  targetStream = new FileOutputStream('/Users/mayanksolanki/Desktop/democopy.rtf');  // Reading source file and writing content to file byte by byte  int temp;  // If there is content inside file than read  while ((temp = sourceStream.read()) != -1)  targetStream.write((byte)temp);    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:

Programa ejecutado exitosamente

Diferencias entre flujo de caracteres y flujo de bytes

AspectoFlujo de personajesFlujo de bytes
Tipo de datos manejadosCaracteres Unicode de 16 bits (texto)Datos sin procesar de 8 bits (binarios)
Las clases terminan conLector / EscritorFlujo de entrada/flujo de salida
Adecuado paraArchivos de texto Datos UnicodeImágenes audio vídeo archivos binarios
ConversiónConvierte bytes a caracteres automáticamenteNinguna conversión funciona con bytes sin formato
EjemplosLector de archivosEscritor de archivosArchivoInputStream ArchivoOutputStream

Artículo relacionado

  • Java IO: entrada/salida en Java con ejemplos