Essencialmente, um buffer é uma entidade intermediária entre duas ou mais outras entidades que produzem e consomem elementos. Internamente, um buffer contém uma área de memória que é utilizada para armazenamento temporário de elementos que foram produzidos mas ainda não foram consumidos.
Essa capacidade de um buffer manter temporariamente parte dos dados produzidos mas não consumidos torna-o um mecanismo adequado para compatibilizar a operação de entidades operando em diferentes velocidades. Além de oferecer transparentemente as mesmas funcionalidades de leitura e escrita de dados, um buffer normalmente oferece operações adicionais que permitem consultar se há dados disponíveis para leitura no buffer de entrada ou para solicitar que os dados presentes no buffer de saída sejam enviados imediatamente para o dispositivo de saída.
Em Java, há quatro classes que adicionam as funcionalidades de
buffering às classes fundamentais de entrada e saída. Para
classes que manipulam bytes, as classes
BufferedInputStream
e
BufferedOutputStream
são
oferecidas. Para a manipulação de entrada e saída de texto, as
classes BufferedReader
e
BufferedWriter
.
© Ivan Luiz Marques Ricarte
DCA/FEEC/UNICAMP