Saltar al contenido

¿Qué es el flujo de entrada y el flujo de salida? ¿Por qué y cuándo los usamos?

Después de consultar con expertos en esta materia, programadores de varias ramas y profesores hemos dado con la respuesta a la cuestión y la plasmamos en este post.

Solución:

El objetivo de InputStream y OutputStream es abstraer diferentes formas de entrada y salida: si la transmisión es un archivo, una página web o la pantalla, no debería importar. Todo lo que importa es que reciba información de la transmisión (o envíe información a esa transmisión).

InputStream se usa para muchas cosas de las que lees.

OutputStream se usa para muchas cosas en las que escribes.

Aquí hay un código de muestra. asume la InputStream instr y OutputStream osstr ya han sido creados:

int i;

while ((i = instr.read()) != -1) 
    osstr.write(i);


instr.close();
osstr.close();

InputStream se usa para leer, OutputStream para escribir. Están conectados como decoradores entre sí, de modo que puede leer/escribir todos los diferentes tipos de datos de todos los diferentes tipos de fuentes.

Por ejemplo, puede escribir datos primitivos en un archivo:

File file = new File("C:/text.bin");
file.createNewFile();
DataOutputStream stream = new DataOutputStream(new FileOutputStream(file));
stream.writeBoolean(true);
stream.writeInt(1234);
stream.close();

Para leer el contenido escrito:

File file = new File("C:/text.bin");
DataInputStream stream = new DataInputStream(new FileInputStream(file));
boolean isTrue = stream.readBoolean();
int value = stream.readInt();
stream.close();
System.out.printlin(isTrue + " " + value);

Puede utilizar otros tipos de secuencias para mejorar la lectura/escritura. Por ejemplo, puede introducir un búfer para la eficiencia:

DataInputStream stream = new DataInputStream(
    new BufferedInputStream(new FileInputStream(file)));

Puede escribir otros datos como objetos:

MyClass myObject = new MyClass(); // MyClass have to implement Serializable
ObjectOutputStream stream = new ObjectOutputStream(
    new FileOutputStream("C:/text.obj"));
stream.writeObject(myObject);
stream.close();

Puede leer de otras fuentes de entrada diferentes:

byte[] test = new byte[] 0, 0, 1, 0, 0, 0, 1, 1, 8, 9;
DataInputStream stream = new DataInputStream(new ByteArrayInputStream(test));
int value0 = stream.readInt();
int value1 = stream.readInt();
byte value2 = stream.readByte();
byte value3 = stream.readByte();
stream.close();
System.out.println(value0 + " " + value1 + " " + value2 + " " + value3);

Para la mayoría de los flujos de entrada, también hay un flujo de salida. Puede definir sus propios flujos para leer/escribir cosas especiales y hay flujos complejos para leer cosas complejas (por ejemplo, hay flujos para leer/escribir en formato ZIP).

Del tutorial de Java:

Un flujo es una secuencia de datos.

Un programa utiliza un flujo de entrada para leer datos de una fuente, un elemento a la vez:

ingrese la descripción de la imagen aquí

Un programa utiliza un flujo de salida para escribir datos en un destino, un elemento a la vez:

ingrese la descripción de la imagen aquí

La fuente de datos y el destino de datos que se muestran arriba pueden ser cualquier cosa que contenga, genere o consuma datos. Obviamente esto incluye archivos de discopero una fuente o un destino también pueden ser otro programa, un dispositivo periférico, un enchufe de red o un array.

Ejemplo de código del tutorial de Oracle:

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class CopyBytes 
    public static void main(String[] args) throws IOException 

        FileInputStream in = null;
        FileOutputStream out = null;

        try 
            in = new FileInputStream("xanadu.txt");
            out = new FileOutputStream("outagain.txt");
            int c;

            while ((c = in.read()) != -1) 
                out.write(c);
            
         finally 
            if (in != null) 
                in.close();
            
            if (out != null) 
                out.close();
            
        
    

Este programa utiliza flujos de bytes para copiar xanadu.txt archivo a de nuevo.txt , escribiendo un byte a la vez

Eche un vistazo a esta pregunta de SE para conocer más detalles sobre los flujos de caracteres avanzados, que son envoltorios sobre los flujos de bytes:

flujo de bytes y flujo de caracteres

Si conservas alguna desconfianza y forma de enriquecer nuestro escrito te invitamos escribir un paráfrasis y con mucho gusto lo analizaremos.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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