Sobes.tech
Junior

Quais são os tipos de fluxos de entrada-saída em Java?

sobes.tech IA

Resposta da IA

Em Java, existem duas categorias principais de fluxos de entrada e saída (java.io):

  1. Fluxos de bytes (Byte Streams): Trabalham com bytes brutos. São usados para manipular dados binários (imagens, áudio, objetos serializados).

    • Classes principais: InputStream (para leitura) e OutputStream (para escrita).
    • Classes derivadas para diferentes fontes/destinos de dados:
      • Arquivos: FileInputStream, FileOutputStream
      • Arrays de bytes: ByteArrayInputStream, ByteArrayOutputStream
      • Buffering: BufferedInputStream, BufferedOutputStream
      • Filtragem/transformação: FilterInputStream, FilterOutputStream (pais de Buffered e outros)
      • Objetos (serialização): ObjectInputStream, ObjectOutputStream
      • Entrada/saída de consola: System.in (InputStream), System.out (PrintStream que estende OutputStream)
  2. Fluxos de caracteres (Character Streams): Trabalham com caracteres Unicode. São usados para manipular dados de texto. Muitas vezes usam internamente fluxos de bytes, convertendo bytes em caracteres com base na codificação.

    • Classes principais: Reader (para leitura) e Writer (para escrita).
    • Classes derivadas:
      • Arquivos: FileReader, FileWriter
      • Arrays de caracteres: CharArrayReader, CharArrayWriter
      • Strings: StringReader, StringWriter
      • Buffering: BufferedReader, BufferedWriter
      • Filtragem/transformação: FilterReader, FilterWriter
      • Entrada/saída com formatação: PrintWriter (para escrita), Scanner (para leitura, embora não seja um descendente direto de Reader, é frequentemente usado para entrada de texto)
      • Entrada/saída de consola: System.in (via InputStreamReader), System.out (via PrintWriter)

Tabela resumida:

Categoria Base de leitura Base de escrita Trabalha com Uso principal
Fluxos de bytes InputStream OutputStream Bytes Dados binários, entrada/saída de baixo nível
Fluxos de caracteres Reader Writer Caracteres (char) Dados de texto, manipulação de codificações

Exemplo de uso:

// Leitura de arquivo com fluxo de bytes
import java.io.FileInputStream;
import java.io.IOException;

public class ByteStreamExample {
    public static void main(String[] args) {
        try (FileInputStream fis = new FileInputStream("data.bin")) {
            int data;
            while ((data = fis.read()) != -1) {
                // Processar cada byte
                System.out.println("Byte lido: " + data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}
// Leitura de arquivo com fluxo de caracteres
import java.io.FileReader;
import java.io.IOException;

public class CharStreamExample {
    public static void main(String[] args) {
        try (FileReader fr = new FileReader("data.txt")) {
            int data;
            while ((data = fr.read()) != -1) {
                // Processar cada caractere
                System.out.print((char) data);
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}