Si leen documentos extendidos en Oracle
http://download.oracle.com/javase/1.4.2/docs/api/java/io/OutputStream.html#flush()
rubores este flujo de salida y fuerza a cualquier bytes de salida tamponada a ser escritos. El contrato general de descarga es que llamar es una indicación de que, si los bytes escritos previamente han sido almacenados temporalmente por la implementación del flujo de salida, dichos bytes deben escribirse inmediatamente en su destino previsto.
El método de descarga de OutputStream no hace nada.
Medios, el método en sí no hace nada, y es abstracto, por lo que cualquier clase subyacente puede implementar su propia versión de los flujos de lavado y obligándolos a escribir (no esperando en la cola de escritura)
Pero de todos modos, como Guillaume señaló, es una buena práctica llamarlo de todos modos. Si más tarde reemplaza su transmisión por otra implementación que sí la use, lo lamentará.
Dependiendo del sistema operativo, flush() no hace más que forzar la escritura de datos en el sistema operativo.
y
flush() no hace nada en FileOutputStream. Solo es útil en transmisiones con buffer.
y de javadoc de close()
, solo para tener en cuenta que no tiene que enjuagar el flujo si lo está cerrando inmediatamente después.
Cierre la secuencia, enjuagándola primero. Una vez que se ha cerrado una secuencia, más invocaciones write() o flush() provocarán que se genere una excepción IOException. Sin embargo, cerrar una secuencia previamente cerrada no tiene ningún efecto.
relacionada:
FileOutputStream.close is really slow when writing large file
flush in java.io.FileWriter
Pero, ¿InputStream y OutputStream tienen uso de ella? o es inútil llamar? – Warpzit
No tiene sentido cuando no uso flujos almacenados en búfer, creo. Las secuencias no almacenadas en búfer deben escribirse en el destino lo antes posible, de acuerdo con OS y HW subyacentes. –
Entonces, fileoutputstream no tiene uso, y lo mismo ocurre con inputstream. – Warpzit