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.
Flujos de personajesEjemplo
Javaimport 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:
Javaimport 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
| Aspecto | Flujo de personajes | Flujo de bytes |
|---|---|---|
| Tipo de datos manejados | Caracteres Unicode de 16 bits (texto) | Datos sin procesar de 8 bits (binarios) |
| Las clases terminan con | Lector / Escritor | Flujo de entrada/flujo de salida |
| Adecuado para | Archivos de texto Datos Unicode | Imágenes audio vídeo archivos binarios |
| Conversión | Convierte bytes a caracteres automáticamente | Ninguna conversión funciona con bytes sin formato |
| Ejemplos | Lector de archivosEscritor de archivos | ArchivoInputStream ArchivoOutputStream |
Artículo relacionado
- Java IO: entrada/salida en Java con ejemplos