Java IO é um grande ponto de conhecimento.
Se você quebrar seus pontos de conhecimento e falar sobre isso, provavelmente será uma semana. Para o sistema de OI, você pode dar uma olhada na foto a seguir.
Em seguida, vamos começar com um pedaço de código, vamos dar uma olhada no seguinte código
public class Test {public static void main (string [] args) lança exceção {arquivo file = new File ("text.txt"); if (! file.exists ()) {file.createnewfile (); } FileOutputStream fos = new FileOutputStream (FILE); BufferOutputStream bos = new BufferoudOutputStream (Fos); byte [] b = novo byte [1024]; bos.write (b); bos.flush (); }} Um fluxo tamponado é construído no código e, em seguida, um dado de comprimento KB é gravado no fluxo e, finalmente, o método Flush () é chamado.
Este é um código de código muito simples, e a saída final é gerar um arquivo de texto de 1kb.text.
Mas se comentarmos a última linha
//bos.flush ();
O texto final gerado. O tamanho do texto se tornará 0.
Esse resultado é muito óbvio, mas se alterarmos Flush () para fechar (), o resultado ainda será 0?
Sobre Flush
Flush () é realmente encontrado na transmissão da rede há muito tempo
Naquela época, para eficiência, o servidor e o cliente não transmitiam uma peça de dados toda vez que ele foi gerado.
Em vez disso, um buffer será criado e os dados serão transferidos para o cliente depois que o buffer estiver cheio.
Às vezes, existe um problema. Quando os dados não são suficientes para preencher o buffer e os dados precisam ser transmitidos ao cliente, para resolver esse problema, existe um conceito de descarga e os dados do buffer são forçados a serem enviados.
Voltando à pergunta acima, é viável substituir a rubor por perto
A resposta é sim.
Se você olhar para o código -fonte, conhecerá o relacionamento de herança do bufferoutputstream
Classe pública BufferOutputStream estende FilterOutputStream
O bufferOutputStream não implementa o método Close (), portanto, ele chamará diretamente o Close () do FilterOutputStream, e o método Close () do filterOutputStream chamará Flush () para produzir os dados do buffer.
No desenvolvimento real, em relação a operações de IO, é enfatizado que o método Close () deve ser chamado no final. O exemplo acima é uma das razões.