Java Io es un gran punto de conocimiento.
Si desglosa sus puntos de conocimiento y hablas de ello, probablemente será una semana. Para el sistema IO, puede echar un vistazo a la siguiente imagen.
A continuación, comencemos con un código, echemos un vistazo al siguiente código
Public Class Test {public static void main (string [] args) lanza la excepción {archivo file = nuevo archivo ("text.txt"); if (! file.exists ()) {file.createenewfile (); } FileOutputStream fos = new FileOutputStream (archivo); BufferedOutputStream Bos = new BufferedOutputStream (FOS); byte [] b = nuevo byte [1024]; bos.write (b); bos.flush (); }} Se construye una secuencia almacenada en el código, y luego se escriben datos de longitud de KB en la secuencia, y finalmente se llama al método FLUSH ().
Esta es una pieza de código muy simple, y la salida final es generar un archivo Text.Text de 1kb.
Pero si comentamos la última línea
//bos.flush ();
El tamaño final de texto generado. El tamaño de texto se convertirá en 0.
Este resultado es muy obvio, pero si cambiamos FLUSH () para cerrar (), ¿el resultado seguirá siendo 0?
Sobre la descarga
Flush () en realidad se encuentra en la transmisión de red hace mucho tiempo
En ese momento, para la eficiencia, el servidor y el cliente no transmitirían un dato cada vez que se generara.
En cambio, se creará un búfer y los datos se transferirán al cliente después de que el búfer esté lleno.
A veces hay tal problema. Cuando los datos no son suficientes para llenar el búfer y los datos deben transmitirse al cliente, para resolver este problema, hay un concepto de descarga y los datos del búfer se ven obligados a enviar.
Volviendo a la pregunta anterior, ¿es factible reemplazar al ras con cierre?
La respuesta es sí.
Si observa el código fuente, conocerá la relación de herencia de BufferedOutputStream
BufferoutputStream de clase pública extiende FilterOutputStream
BufferedOutputStream no implementa el método Close (), por lo que llamará directamente al cierre () de FilterOutputStream, y el método Close () de FilterOutputStream llamará a Flush () para producir los datos del búfer.
En el desarrollo real, con respecto a las operaciones de IO, se enfatiza que el método Close () debe llamarse al final. El ejemplo anterior es una de las razones.