Respostas:
A partir dos documentos do flush
método:
Libera o fluxo de saída e força a gravação de quaisquer bytes de saída em buffer. O contrato geral de liberação é que chamá-lo é uma indicação de que, se quaisquer bytes gravados anteriormente tiverem sido armazenados em buffer pela implementação do fluxo de saída, esses bytes deverão ser gravados imediatamente no destino pretendido.
O buffer é feito principalmente para melhorar o desempenho de E / S. Pode ler mais sobre este artigo: Ajustando o desempenho de E / S do Java .
Quando damos qualquer comando, os fluxos desse comando são armazenados no local da memória chamado buffer (um local de memória temporário) em nosso computador. Quando toda a localização da memória temporária está cheia, usamos flush (), que libera todos os fluxos de dados e os executa completamente e dá um novo espaço para novos fluxos no local temporário do buffer. -Espero que você entenda
BufferedOutputStream
, BufferedWriter
, ObjectOutputStream,
e as PrintXXX
classes. O flush()
método de qualquer outro fluxo ou Writer
não faz nada.
flush()
explicitamente não é necessário para a BufferedWriter
, contanto que você seja close()
o escritor. close()
executa um flush em si.
close()
chamadas flush()
, portanto, chamar ambas é redundante ao usar FileWriter
sem buffer.
Quando você grava dados em um fluxo, eles não são gravados imediatamente e são armazenados em buffer. Portanto, use flush()
quando precisar ter certeza de que todos os seus dados do buffer estão gravados.
Precisamos ter certeza de que todas as gravações são concluídas antes de fecharmos o fluxo, e é por isso que flush()
é chamado no arquivo / gravador em buffer close()
.
Mas se você tiver um requisito para que todas as suas gravações sejam salvas a qualquer momento antes de fechar o fluxo, use flush()
.
FilterOutputStream
e FilterWriter
.
Se o buffer estiver cheio, todas as strings nele armazenadas em buffer, elas serão salvas no disco. Buffers é usado para evitar grandes promoções! e sobrecarga.
Na classe BufferedWriter que é colocada nas bibliotecas java, há uma linha como:
private static int defaultCharBufferSize = 8192;
Se você deseja enviar dados antes que o buffer esteja cheio, você tem controle. Apenas lave-o. Chamadas para writer.flush () dizem: "envie o que estiver no buffer agora!
livro de referência: https://www.amazon.com/Head-First-Java-Kathy-Sierra/dp/0596009208
páginas: 453
Os fluxos geralmente são acessados por threads que periodicamente esvaziam seu conteúdo e, por exemplo, exibem na tela, enviam para um soquete ou gravam em um arquivo. Isso é feito por razões de desempenho. Liberar um fluxo de saída significa que você deseja parar, aguardar a transferência completa do conteúdo para o destino e, em seguida, retomar a execução com o fluxo vazio e o conteúdo enviado.
Para problemas de desempenho, os primeiros dados devem ser gravados no buffer. Quando o buffer fica cheio, os dados são gravados na saída (arquivo, console etc.). Quando o buffer está parcialmente preenchido e você deseja enviá-lo para a saída (arquivo, console), é necessário chamar o método flush () manualmente para gravar o buffer parcialmente preenchido na saída (arquivo, console).