Pergunta

Alguém me explica o que InputStream e OutputStream são?

Estou confuso sobre os casos de uso, tanto para InputStream e OutputStream.

Se você também poderia incluir um snippet de código para ir junto com sua explicação, que seria ótimo.Obrigado!

Foi útil?

Solução

O objetivo da InputStream e OutputStream é diferentes formas abstratas para entrada e saída: se o fluxo é um arquivo, uma página web, ou a tela não deve assunto. Tudo o que importa é que você recebe informações do fluxo (ou informações enviar para esse fluxo.)

InputStream é usado para muitas coisas que você lê a partir de.

OutputStream é usado para muitas coisas que você escreve para.

Aqui está um código de exemplo. Ele assume o InputStream instr e OutputStream osstr já foram criados:

int i;

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

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

Outras dicas

InputStream é usado para a leitura, OutputStream para a escrita. Eles estão conectados como decoradores um ao outro de tal forma que você pode ler / escrever todos os diferentes tipos de dados de todos os diferentes tipos de fontes.

Por exemplo, você pode gravar dados primitivos para um arquivo:

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 ler o conteúdo 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);

Você pode usar outros tipos de fluxos para melhorar a leitura / escrita. Por exemplo, você pode introduzir um tampão para a eficiência:

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

Você pode escrever outros dados, tais 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();

Você pode ler a partir de outras fontes de entrada diferente:

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 a maioria dos fluxos de entrada há um fluxo de saída, também. Você pode definir seus próprios fluxos de leitura / escrita coisas especiais e há fluxos complexos para a leitura de coisas complexas (por exemplo, existem Streams para leitura / escrita formato ZIP).

A partir da Java Tutorial :

Uma corrente é uma sequência de dados.

Um programa usa um fluxo de entrada para ler dados a partir de uma fonte, um item de cada vez:

 enter descrição da imagem aqui

Um programa usa um fluxo de saída para gravar dados para um destino, um item de cada vez:

 enter descrição da imagem aqui

O destino da fonte de dados e os dados na foto acima pode ser qualquer coisa que mantém, gera, ou dados consome. Obviamente, isso inclui arquivos de disco , mas uma fonte ou de destino também pode ser outro programa, um dispositivo periférico, uma tomada de rede, ou um array .

Amostra código de tutorial 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 byte usos programa de fluxos de copiar xanadu.txt para outagain.txt , por escrever um byte de cada vez

Tenha um olhar para esta questão SE para saber mais detalhes sobre fluxos de caracteres avançados, que são invólucros no topo de Byte Streams:

byte corrente e fluxo de caracteres

você ler de um InputStream e gravação para um OutputStream.

Por exemplo, digamos que você deseja copiar um arquivo. Você criaria um FileInputStream para ler a partir do arquivo de origem e um FileOutputStream para escrever para o novo arquivo.

Se os seus dados é um fluxo de caracteres, você poderia usar um FileReader em vez de um InputStream e um FileWriter em vez de um OutputStream, se preferir.

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 é uma classe abstrata que representa escrevendo saída. Existem muitas classes OutputStream diferentes, e eles escrevem para certas coisas (como a tela ou arquivos, ou matrizes de bytes, ou conexões de rede, ou etc). as classes InputStream acessar as mesmas coisas, mas eles ler dados a partir deles.

Aqui está um bom exemplo básica de usar FileOutputStream e FileInputStream para gravar dados a uma arquivo, em seguida, lê-lo novamente.

Um fluxo é um fluxo contínuo de líquido, ar, ou de gás.

fluxo de Java é um fluxo de dados de uma fonte ou em um destino. A origem ou destino pode ser um disco, memória, tomada, ou outros programas. Os dados podem ser bytes, caracteres ou objectos. O mesmo se aplica para C # ou streams C ++. Uma boa metáfora para Java córregos é a água que flui de uma torneira em uma banheira e mais tarde em uma drenagem.

Os dados representam a parte estática do fluxo; a ler e escrever métodos a parte dinâmica do fluxo.

InputStream representa um fluxo de dados a partir da fonte, o OutputStream representa um fluxo de dados para o destino. Finalmente, InputStream e OutputStream são abstrações sobre o acesso de baixo nível aos dados, tais como ponteiros de arquivo C.

Stream:Em termos leigos stream de dados , mais genérico de fluxo é a representação binária de dados.

Fluxo De Entrada :Se você está lendo dados de um arquivo ou de qualquer outra fonte , fluxo usado é o fluxo de entrada.Em termos mais simples de fluxo de entrada funciona como um canal para leitura de dados.

Fluxo De Saída :Se você quiser ler e processar dados a partir de uma fonte (arquivo, etc), você precisa primeiro salvar os dados , a média para armazenar dados de fluxo de saída .

Um fluxo de saída está geralmente relacionada a algum destino de dados como um arquivo ou uma etc.In fluxo de saída java rede é um destino onde os dados são, eventualmente, escrita e 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");
    }
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top