Sobes.tech
Junior

Qual é a vantagem do buffer?

sobes.tech IA

Resposta da IA

A bufferização em Java I/O reduz o número de acessos às operações de entrada/saída de baixo nível, o que aumenta significativamente o desempenho. Ler/gravar blocos grandes de dados numa única chamada ao sistema é mais eficiente do que múltiplas operações pequenas.

Ao ler: BufferedInputStream lê dados do fluxo base para a memória buffer. Quando são solicitadas pequenas porções de dados, elas são retiradas do buffer sem necessidade de aceder à fonte (disco, rede) a cada vez. Só quando o buffer fica vazio é que uma nova leitura de bloco de dados ocorre.

Ao gravar: BufferedOutputStream primeiro grava os dados no buffer. A gravação no fluxo base ocorre quando o buffer está cheio ou quando o método flush() é chamado. Isto minimiza o número de chamadas ao sistema para gravação.

Vantagens:

  • Redução de custos adicionais: Diminui o número de acessos ao SO e ao hardware.
  • Aumento da largura de banda: Os dados são transmitidos em blocos grandes.
  • Melhoria do desempenho: O tempo total das operações de entrada/saída é reduzido.

Exemplo de uso de BufferedInputStream:

import java.io.FileInputStream;
import java.io.BufferedInputStream;
import java.io.IOException;

public class BufferedReaderExample {
    public static void main(String[] args) {
        try (FileInputStream fileInputStream = new FileInputStream("example.txt");
             BufferedInputStream bufferedInputStream = new BufferedInputStream(fileInputStream)) {

            int data;
            while ((data = bufferedInputStream.read()) != -1) {
                // Processar o byte lido
                System.out.print((char) data);
            }

        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}