Respuestas:
De los documentos del flush
método:
Vacía el flujo de salida y fuerza la escritura de los bytes de salida almacenados en búfer. El contrato general de flush es que llamarlo es una indicación de que, si los bytes escritos previamente han sido almacenados en búfer por la implementación del flujo de salida, dichos bytes deben escribirse inmediatamente en su destino previsto.
El almacenamiento en búfer se realiza principalmente para mejorar el rendimiento de E / S. Puede leer más sobre esto en este artículo: Ajuste del rendimiento de E / S de Java .
Cuando damos cualquier comando, las secuencias de ese comando se almacenan en la ubicación de memoria llamada búfer (una ubicación de memoria temporal) en nuestra computadora. Cuando toda la ubicación de la memoria temporal está llena, usamos flush (), que vacía todos los flujos de datos y los ejecuta por completo y da un nuevo espacio a los nuevos flujos en la ubicación temporal del búfer. -Espero que lo entiendas
BufferedOutputStream
, BufferedWriter
, ObjectOutputStream,
y las PrintXXX
clases. El flush()
método de cualquier otra corriente o Writer
no hace nada.
flush()
No se requiere invocar explícitamente para a BufferedWriter
, siempre y cuando usted sea close()
el escritor. close()
ejecuta una descarga por sí mismo.
close()
llamadas flush()
, por lo que llamar a ambos es redundante cuando se usa FileWriter
sin búfer.
Cuando escribe datos en una secuencia, no se escribe inmediatamente y se almacena en búfer. Por lo tanto, utilícelo flush()
cuando necesite asegurarse de que todos los datos del búfer estén escritos.
Necesitamos asegurarnos de que todas las escrituras se completen antes de cerrar la secuencia, y es por eso que flush()
se llama en el archivo / escritor en búfer close()
.
Pero si tiene el requisito de que todas sus escrituras se guarden en cualquier momento antes de cerrar la transmisión, use flush()
.
FilterOutputStream
y FilterWriter
.
Si el búfer está lleno, todas las cadenas almacenadas en él se guardarán en el disco. ¡Los búferes se utilizan para evitar grandes ofertas! y arriba.
En la clase BufferedWriter que se coloca en las bibliotecas de Java, hay una línea como:
private static int defaultCharBufferSize = 8192;
Si desea enviar datos antes de que se llene el búfer, tiene el control. Simplemente enjuague. Las llamadas a writer.flush () dicen, "envía lo que esté en el búfer, ¡ahora!
libro de referencia: https://www.amazon.com/Head-First-Java-Kathy-Sierra/dp/0596009208
páginas: 453
A menudo se accede a las transmisiones mediante hilos que periódicamente vacían su contenido y, por ejemplo, lo muestran en la pantalla, lo envían a un socket o lo escriben en un archivo. Esto se hace por motivos de rendimiento. Vaciar un flujo de salida significa que desea detenerse, esperar a que el contenido del flujo se transfiera por completo a su destino y luego reanudar la ejecución con el flujo vacío y el contenido enviado.
Por cuestiones de rendimiento, los primeros datos deben escribirse en Buffer. Cuando el búfer se llena, los datos se escriben en la salida (archivo, consola, etc.). Cuando el búfer está parcialmente lleno y desea enviarlo a la salida (archivo, consola), debe llamar al método flush () manualmente para escribir el búfer parcialmente lleno en la salida (archivo, consola).