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:
Un programa utiliza un flujo de salida para escribir datos en un destino, un elemento a la vez:
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.