Atualizado: 21/09/2025

Este conteúdo é original e não foi gerado por inteligência artificial.

Streams de Entrada e Saída em Java

A manipulação de arquivos e streams é uma característica fundamental em muitas linguagens de programação. Em Java, as funcionalidades essenciais para trabalhar com streams estão concentradas nas classes do pacote java.io.

O termo "stream" (fluxo), no contexto de programação, pode ter diferentes significados. Ao abordar arquivos e operações de entrada e saída (I/O), um stream é uma abstração que representa uma sequência de dados, utilizada para operações de leitura e escrita em fontes como arquivos, soquetes de rede ou o console.

O sistema de I/O de Java conecta um stream a uma fonte ou destino físico de dados. É possível, por exemplo, associar um stream a um arquivo para ler seu conteúdo ou para escrever novos dados nele. Da mesma forma, um stream pode ser vinculado a um soquete de rede para enviar ou receber informações. Todas essas tarefas são gerenciadas por meio de streams.

Um objeto que permite a leitura de dados é conhecido como stream de entrada (input stream), enquanto um objeto que permite a escrita de dados é chamado de stream de saída (output stream). Por exemplo, para ler o conteúdo de um arquivo, se utiliza um stream de entrada; para gravar nele, um stream de saída.

Na base de todas as classes que gerenciam fluxos de bytes, encontram-se duas classes abstratas fundamentais: InputStream, para streams de entrada, e OutputStream, para streams de saída.

Como a manipulação direta de bytes pode ser complexa, foram introduzidas classes abstratas específicas para trabalhar com fluxos de caracteres: Reader para leitura e Writer para escrita.

Todas as outras classes que operam com streams herdam dessas classes abstratas. A seguir estão algumas das principais classes de stream disponíveis em Java:

Streams de Bytes (Entrada)Streams de Bytes (Saída)Streams de Caracteres (Leitura)Streams de Caracteres (Escrita)
InputStreamOutputStreamReaderWriter
FileInputStreamFileOutputStreamFileReaderFileWriter
BufferedInputStreamBufferedOutputStreamBufferedReaderBufferedWriter
ByteArrayInputStreamByteArrayOutputStreamCharArrayReaderCharArrayWriter
FilterInputStreamFilterOutputStreamFilterReaderFilterWriter
DataInputStreamDataOutputStream
ObjectInputStreamObjectOutputStream

Streams de Bytes

A Classe InputStream

A classe InputStream é a base para todos os streams de entrada de bytes. Seus principais métodos são:

  • int available(): retorna a quantidade de bytes disponíveis para leitura no stream.
  • void close(): fecha o stream.
  • int read(): retorna a representação inteira do próximo byte no stream. Quando não há mais bytes disponíveis para leitura, o método retorna -1.
  • int read(byte[] buffer): lê bytes do stream para o array buffer e retorna o número de bytes lidos. Se nenhum byte for lido, retorna -1.
  • int read(byte[] buffer, int offset, int length): lê uma quantidade de bytes igual a length do stream para o array buffer, começando a partir da posição offset. Retorna o número de bytes lidos com sucesso.
  • long skip(long number): pula uma quantidade de bytes igual a number durante a leitura no stream.

A Classe OutputStream

A classe OutputStream é a base para todos os streams de saída de bytes. Sua funcionalidade é implementada por meio dos seguintes métodos:

  • void close(): fecha o stream.
  • void flush(): força a escrita de todos os dados mantidos no buffer para o destino.
  • void write(int b): grava no stream de saída um único byte, representado pelo parâmetro inteiro b.
  • void write(byte[] buffer): grava o conteúdo do array de bytes buffer no stream de saída.
  • void write(byte[] buffer, int offset, int length): grava no stream de saída uma quantidade de bytes igual a length do array buffer, começando a partir da posição offset.

Streams de Caracteres

A Classe Abstrata Reader

A classe abstrata Reader fornece a funcionalidade para a leitura de informações de texto. Seus principais métodos são:

  • abstract void close(): fecha o stream de entrada.
  • int read(): retorna a representação inteira do próximo caractere no stream. Se o final do stream for alcançado, retorna -1.
  • int read(char[] buffer): lê caracteres do stream para o array buffer. Retorna o número de caracteres lidos com sucesso ou -1 ao atingir o final do stream.
  • int read(CharBuffer buffer): lê caracteres do stream para um objeto CharBuffer e retorna a quantidade de caracteres lidos. Retorna -1 ao atingir o final do stream.
  • abstract int read(char[] buffer, int offset, int count): lê uma quantidade de caracteres igual a count do stream para o array buffer, começando a partir da posição offset.
  • long skip(long count): pula uma quantidade de caracteres igual a count. Retorna o número de caracteres pulados com sucesso.

A Classe Abstrata Writer

A classe Writer define a funcionalidade para todos os streams de saída de caracteres. Seus principais métodos incluem:

  • Writer append(char c): adiciona o caractere c ao final do stream de saída. Retorna o próprio objeto Writer.
  • Writer append(CharSequence chars): adiciona a sequência de caracteres chars ao final do stream. Retorna o próprio objeto Writer.
  • abstract void close(): fecha o stream.
  • abstract void flush(): limpa os buffers do stream.
  • void write(int c): grava no stream um único caractere, representado pelo seu valor inteiro.
  • void write(char[] buffer): grava no stream um array de caracteres.
  • abstract void write(char[] buffer, int off, int len): grava no stream uma quantidade de caracteres igual a len do array buffer, começando a partir do índice off.
  • void write(String str): grava uma string no stream.
  • void write(String str, int off, int len): grava no stream uma quantidade de caracteres igual a len da string str, começando a partir do índice off.

As funcionalidades descritas pelas classes Reader e Writer são herdadas por classes concretas, como FileReader e FileWriter, que são projetadas especificamente para a manipulação de arquivos de texto.


Resumo

  • Streams são abstrações para leitura e escrita de dados de uma fonte ou para um destino.
  • Streams de entrada (InputStream, Reader) são usados para ler dados, enquanto streams de saída (OutputStream, Writer) são usados para escrever dados.
  • InputStream e OutputStream são as classes base para a manipulação de fluxos de bytes, adequados para dados binários.
  • Reader e Writer são as classes base para a manipulação de fluxos de caracteres, ideais para trabalhar com texto.
  • Métodos como read(), write(), close() e flush() são fundamentais para o controle dos streams e o gerenciamento de recursos.
Política de Privacidade

Copyright © www.programicio.com Todos os direitos reservados

É proibida a reprodução do conteúdo desta página sem autorização prévia do autor.

Contato: programicio@gmail.com