Domanda

Qualcuno mi spieghi cosa InputStream E OutputStream Sono?

Sono confuso riguardo ai casi d'uso per entrambi InputStream E OutputStream.

Se potessi includere anche uno snippet di codice per accompagnare la tua spiegazione, sarebbe fantastico.Grazie!

È stato utile?

Soluzione

L'obiettivo di InputStream e OutputStream è quello di astratti modi diversi di ingresso e uscita: se il flusso è un file, una pagina web, o lo schermo non dovrebbe importare. Tutto ciò che conta è che si ricevono informazioni dal flusso (o inviare informazioni in quel flusso.)

InputStream viene utilizzato per molte cose che si leggono da.

OutputStream viene utilizzato per molte cose che si scrivono a.

Ecco alcuni esempi di codice. sono già stati creati Assume la InputStream instr e OutputStream osstr:

int i;

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

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

Altri suggerimenti

InputStream viene utilizzato per la lettura, OutputStream per la scrittura.Sono collegati tra loro come decoratori in modo tale da poter leggere/scrivere tutti i diversi tipi di dati da tutti i diversi tipi di fonti.

Ad esempio, puoi scrivere dati primitivi in ​​un file:

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

Per leggere il contenuto scritto:

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);

È possibile utilizzare altri tipi di flussi per migliorare la lettura/scrittura.Ad esempio, puoi introdurre un buffer per l'efficienza:

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

Puoi scrivere altri dati come oggetti:

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

Puoi leggere da altre diverse fonti di input:

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);

Per la maggior parte dei flussi di input esiste anche un flusso di output.Puoi definire i tuoi flussi per leggere/scrivere cose speciali e ci sono flussi complessi per leggere cose complesse (ad esempio ci sono flussi per leggere/scrivere il formato ZIP).

Dal Tutorial Java:

Un flusso è una sequenza di dati.

Un programma utilizza un flusso di input per leggere i dati da una fonte, un elemento alla volta:

enter image description here

Un programma utilizza un flusso di output per scrivere i dati in una destinazione, un elemento alla volta:

enter image description here

L'origine dati e la destinazione dati nella foto sopra possono essere qualsiasi cosa che contenga, generi o consumi dati.Ovviamente questo include file del disco, ma può esserlo anche una sorgente o una destinazione un altro programma, un dispositivo periferico, un socket di rete o un array.

Campione codice dal tutorial di 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();
            }
        }
    }
}

Questo programma utilizza flussi di byte per copiare xanadu.txt file a outagain.txt , scrivendo un byte alla volta

Dai un'occhiata a questa domanda SE per conoscere maggiori dettagli sui flussi di caratteri avanzati, che sono wrapper sopra i flussi di byte:

flusso di byte e flusso di caratteri

si legge da un InputStream e scrivere ad un OutputStream.

Per esempio, diciamo che si desidera copiare un file. Si potrebbe creare un FileInputStream per leggere dal file di origine e un FileOutputStream di scrivere il nuovo file.

Se i dati sono un flusso di caratteri, è possibile utilizzare una FileReader invece di un InputStream e un FileWriter invece di un OutputStream, se si preferisce.

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();

OutputStream è una classe astratta che rappresenta la scrittura di uscita. Ci sono molte classi OutputStream diversi, e che scrivono fuori a certe cose (come lo schermo, o file, o array di byte, o le connessioni di rete, o ecc). classi InputStream accedono le stesse cose, ma che leggono i dati in da loro.

Ecco un buon esempio di base di utilizzare FileOutputStream e FileInputStream per scrivere i dati ad un File, quindi leggere nuovamente.

  

Un flusso è un flusso continuo di liquido, aria o gas.

flusso di Java è un flusso di dati da una sorgente o in una destinazione. La sorgente o destinazione può essere un disco, memoria, presa, o altri programmi. I dati possono essere byte, caratteri o oggetti. Lo stesso vale per C # o flussi di C ++. Una buona metafora per flussi di Java è l'acqua che scorre da un rubinetto in una vasca da bagno e poi in un drenaggio.

I dati rappresentano la parte statica del flusso; il leggere e scrivere i metodi la parte dinamica del flusso.

InputStream rappresenta un flusso di dati dalla sorgente, il OutputStream rappresenta un flusso di dati nella destinazione. Infine, InputStream e OutputStream sono astrazioni oltre accesso di basso livello ai dati, come ad esempio i puntatori di file C.

Flusso:In parole povere il flusso è dati, il flusso più generico è la rappresentazione binaria dei dati.

Flusso di ingresso :Se stai leggendo dati da un file o da qualsiasi altra fonte, il flusso utilizzato è il flusso di input.In termini più semplici, il flusso di input funge da canale per leggere i dati.

Flusso di uscita :Se desideri leggere ed elaborare i dati da una fonte (file, ecc.), devi prima salvare i dati, il mezzo per archiviare i dati è il flusso di output.

Un flusso di uscita è generalmente legata a qualche destinazione dei dati come un file o un flusso di output Java rete etc.In è una destinazione dove i dati vengono finalmente scritta e finisce

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");
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top