Java BufferedOutputStream: Escrita Eficiente de Bytes Explicada
Java BufferedOutputStream: Escrita Eficiente de Bytes Explicada
Domine a classe BufferedOutputStream — seu design, uso e métodos principais — através de explicações claras e snippets de código práticos.
A classe BufferedOutputStream, parte do pacote java.io, envolve outro OutputStream para acelerar saída de nível de byte. Ao bufferizar dados na memória, reduz o número de operações de escrita no dispositivo subjacente, o que pode melhorar dramaticamente a performance, especialmente para arquivos grandes.
Ela herda da classe abstrata OutputStream e fornece implementações concretas para seus métodos.
Como BufferedOutputStream Funciona
O stream aloca internamente um buffer de 8 KiB (8.192 bytes) por padrão. Quando write() é chamado, bytes são primeiro armazenados neste buffer. Apenas quando o buffer está cheio, ou quando flush() ou close() é invocado, os dados são descarregados para o stream subjacente.
Como I/O de disco é caro, essa estratégia de bufferização reduz viagens de ida e volta e torna escritas de byte consideravelmente mais rápidas.
Criando um BufferedOutputStream
Importe a classe e então envolva qualquer OutputStream, tipicamente um FileOutputStream:
FileOutputStream file = new FileOutputStream("output.txt");
BufferedOutputStream buffer = new BufferedOutputStream(file);
Para controlar o tamanho do buffer, forneça um segundo argumento:
BufferedOutputStream buffer = new BufferedOutputStream(file, 16384); // buffer 16 KiB
Escolher um buffer maior pode ser benéfico para escritas muito grandes, mas o padrão de 8 KiB funciona bem para a maioria dos cenários.
Métodos Principais do BufferedOutputStream
A classe implementa o conjunto completo de métodos de OutputStream com suporte a buffer.
write()
write(int b)– Adiciona um único byte ao buffer.write(byte[] b)– Escreve um array de bytes inteiro.write(byte[] b, int off, int len)– Escrevelenbytes começando no offsetoff.
Exemplo: Escrevendo Texto em um Arquivo
import java.io.*;
public class Main {
public static void main(String[] args) {
String dados = "Esta é uma linha de texto dentro do arquivo";
try (FileOutputStream fos = new FileOutputStream("output.txt");
BufferedOutputStream bos = new BufferedOutputStream(fos)) {
bos.write(dados.getBytes());
} catch (IOException e) {
e.printStackTrace();
}
}
}
Executar este programa cria output.txt contendo:
Esta é uma linha de texto dentro do arquivo
Nota: String.getBytes() converte a string em um array de bytes usando o charset padrão da plataforma. Para resultados determinísticos, especifique um charset, ex: dados.getBytes(StandardCharsets.UTF_8).
flush()
Força quaisquer dados em buffer a serem escritos no stream subjacente imediatamente. Isso é útil quando você precisa garantir persistência de dados antes de fechar o stream ou ao escrever em um socket de rede.
BufferedOutputStream bos = new BufferedOutputStream(fos);
bos.write(dados.getBytes());
bos.flush(); // garante que dados sejam enviados
close()
Fecha o stream, liberando quaisquer dados restantes e liberando recursos do sistema. Após chamar close(), o stream não pode ser usado novamente.
Para uma referência abrangente, consulte a documentação oficial do Java: API BufferedOutputStream.
Java
- Entendendo a Palavra-chave final em Java: Variáveis, Métodos e Classes
- Operador instanceof em Java: Guia Completo
- Dominando Herança em Java: Conceitos, Tipos e Exemplos Práticos
- Entendendo Classes Aninhadas Estáticas em Java: Uso, Diferenças e Exemplos
- Dominando Classes Internas Anônimas em Java: Definição, Sintaxe e Exemplos Práticos
- Padrão Singleton em Java Explicado: Como Implementar e Usar com Segurança
- Dominando Reflection em Java: Inspecionando Classes, Métodos e Campos em Tempo de Execução
- Dominando Java ObjectOutputStream: Serialização, Métodos e Exemplos Práticos
- Dominando Java Generics – Construindo Código Reutilizável e Type-Safe
- Dominando Operações de Arquivo em Java com java.io – Criação, Leitura, Escrita e Exclusão