2009-12-02 27 views

Respuesta

168

El objetivo de InputStream y OutputStream es maneras diferentes abstractos a la entrada y salida:. Si el flujo es una archivo, una página web o la pantalla no deberían importar. Lo único 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 que lee.

OutputStream se utiliza para muchas cosas que se escriben a.

Aquí hay un código de muestra. Se asume que el InputStream instr y OutputStream osstr ya se han creado:

int i; 

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

instr.close(); 
osstr.close(); 
+41

¿Qué es un "flujo"? –

+42

@KorayTugay Una secuencia generalmente se define como un conjunto de caracteres. Para ser más precisos, se llama más de un bit o carácter como una secuencia. –

9

se lee desde un InputStream y escribir en un OutputStream.

por ejemplo, supongamos que quiere copiar un archivo. Debería crear un FileInputStream para leer desde el archivo de origen y un FileOutputStream para escribir en el nuevo archivo.

Si los datos es un flujo de caracteres, se puede utilizar un FileReader en lugar de un InputStream y una FileWriter en lugar de un OutputStream si lo prefiere.

InputStream input = ... // many different types 
OutputStream output = ... // many different types 

byte[] buffer = new byte[1024]; 
int n = 0; 
while ((n = input.read(buffer)) != -1) 
    output.write(buffer, 0, n); 

input.close(); 
output.close(); 
+3

'close' always' flush'es, entonces no. – pstanton

5

OutputStream es una clase abstracta que representa la salida de escritura. Hay muchas clases diferentes de OutputStream, y escriben en ciertas cosas (como la pantalla, o los archivos, o las matrices de bytes, o las conexiones de red, etc.). Las clases de InputStream acceden a las mismas cosas, pero leen datos desde ellas.

Aquí es a good basic example de utilizar FileOutputStream y FileInputStream para escribir datos en un archivo, a continuación, leer de nuevo en

80

InputStream se utiliza para la lectura, OutputStream para la escritura. Se conectan entre sí como decoradores de manera que puede leer/escribir todos los tipos de datos diferentes de todos los tipos diferentes 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 flujos para mejorar la lectura/escritura.Por ejemplo, se puede introducir un búfer para la eficiencia:

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

Puede escribir otros datos, tales 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(); 

Usted puede leer de otras diferentes fuentes de entrada:

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 propias secuencias para leer/escribir cosas especiales y hay secuencias complejas para leer cosas complejas (por ejemplo, hay secuencias para leer/escribir en formato ZIP).

22

Desde el Java Tutorial:

Una corriente es una secuencia de datos.

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

enter image description here

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

enter image description here

La fuente de datos y el destino de los datos representados anteriormente pueden ser cualquier cosa que contenga, genere o consuma datos. Obviamente, esto incluye archivos de disco, pero una fuente o destino también puede ser otro programa, un dispositivo periférico, un conector de red o una matriz.

Muestra code de tutorial oráculo:

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 a copiar xanadu.txt archivo a outagain.txt, escribiendo un byte a la vez

Eche un vistazo a esta pregunta de SE para conocer más detalles acerca de las secuencias de caracteres avanzadas, que son envolturas en la parte superior de las transmisiones de bytes:

byte stream and character stream

0

un flujo de salida está generalmente relacionado con algún destino de datos como un archivo o una corriente de salida de Java etc.In red es un destino donde los datos son finalmente escrito y termina

import java.io.printstream; 

class PPrint { 
    static PPrintStream oout = new PPrintStream(); 
} 

class PPrintStream { 
    void print(String str) { 
     System.out.println(str) 
    } 
} 

class outputstreamDemo { 
    public static void main(String args[]) { 
     System.out.println("hello world"); 
     System.out.prinln("this is output stream demo"); 
    } 
} 
0

Stream: En términos simples, la transmisión de datos es la corriente más genérica, es la representación binaria de los datos.

Entrada Stream: Si está leyendo datos de un archivo o de cualquier otra fuente, la secuencia utilizada es la secuencia de entrada.En términos más simples, la secuencia de entrada actúa como un canal para leer datos.

flujo de salida: Si desea leer y procesar datos de una fuente (archivo etc) primero tiene que guardar los datos, la media para almacenar datos es flujo de salida.

0

Una corriente es un flujo continuo de líquido, aire o gas.

La transmisión de Java es un flujo de datos desde una fuente o hacia un destino. La fuente o el destino puede ser un disco, memoria, socket u otros programas. Los datos pueden ser bytes, caracteres u objetos. Lo mismo se aplica a las transmisiones C# o C++. Una buena metáfora de las corrientes de Java es el agua que fluye de un grifo a una bañera y luego a un drenaje.

Los datos representan la parte estática de la secuencia; los métodos de lectura y escritura son la parte dinámica de la transmisión.

InputStream representa un flujo de datos de la fuente, el OutputStream representa un flujo de datos en el destino. Finalmente, InputStream y OutputStream son abstracciones sobre el acceso de bajo nivel a los datos, como los punteros de archivo C.

Cuestiones relacionadas