Pregunta

Tengo una pregunta en mi mente que, al escribir en el archivo, antes de realizar el cierre, deberíamos incluir flush () ??. Si es así lo que hará exactamente? Dont flujos de descarga automática ?? EDIT:

Así vaciar lo que realmente?

¿Fue útil?

Solución

Los escritores y arroyos generalmente amortiguar algunos de sus datos de salida en la memoria y tratar de escribir en bloques más grandes a la vez. enrojecimiento causará una escritura inmediata en el disco de la memoria intermedia, por lo que si el programa se bloquea que los datos no se perderán. Por supuesto, no hay ninguna garantía, ya que el disco puede no físicamente escribir los datos de inmediato, por lo que todavía podrían perderse. Pero entonces no sería culpa del programa Java:)

PrintWriters el auto-vaciado (por defecto) cuando se escribe un extremo de la línea, y de corrientes de golf y tampones ras cuando los cierran. Aparte de eso, hay Flushing sólo cuando el búfer está lleno.

Otros consejos

Yo recomendaría llamar al ras antes del cierre. Básicamente se escribe los datos restantes bufferized en el archivo.

Si llama explícitamente flush puede estar seguro de que cualquier IOException saliendo de close es realmente catastrófica y en relación con la liberación de recursos del sistema.

Cuando flush usted mismo, usted puede manejar su IOException de la misma manera como usted maneja sus datos escriben excepciones.

No es necesario hacer un rubor debido a close () lo hará por usted.

Desde el javadoc:

"Cerrar la corriente, rubor primero. Una vez que una corriente se ha cerrado, además de escritura () o flush () invocaciones provocará una IOException para ser lanzado. El cierre de una secuencia previamente cerrado, sin embargo, no tiene ningún efecto."

Para responder a su pregunta en cuanto a lo que realmente hace al ras, se asegura de que todo lo que han escrito a la corriente - un archivo en su caso - no escriban realmente en el archivo en el acto.

Java puede realizar búfer lo que significa que se sostendrá sobre los datos escritos en la memoria hasta que tenga una cierta cantidad, y luego escribirlo todo en el archivo de una sola vez que es más eficiente. La desventaja de esto es que el archivo no es necesariamente hasta a la fecha en un momento dado. Color, es una forma de decir "hacer el archivo de arriba-hasta la fecha.

Cerrar llamadas ras primero para garantizar que después de cerrar el archivo tiene lo que se esperaría ver en ella, por lo tanto, como otros han señalado, no hay necesidad de enjuagar antes del cierre.

Cerrar vuelca automáticamente. No es necesario llamarlo.

No hay ningún punto en llamar a flush () justo antes de su fin (), como otros han dicho. El momento para usar flush () es que si usted está guardando el archivo abierto, pero quieren asegurarse de que las escrituras anteriores se han completado totalmente.

Como se ha dicho, que por lo general no tienen que tirar.

Sólo tiene sentido si, por alguna razón, desea otro proceso para ver todo el contenido de un archivo que está trabajando, sin cerrarlo. Por ejemplo, podría ser utilizado para un archivo que se modifica simultáneamente por múltiples procesos, aunque con mucho cuidado: -)

FileWriter es una clase de mal ya que recoge todo lo que sucede conjunto de caracteres que estar allí, en lugar de tomar un conjunto de caracteres explícito. Incluso si lo hace desear el valor por defecto, ser explícitos al respecto.

La solución habitual es OutputStreamWriter y FileOutputStream. Es posible que el decorador para lanzar una excepción. Por lo tanto tiene que ser capaz de cerrar la corriente incluso si el escritor nunca se construyó. Si se va a hacer eso, sólo es necesario para eliminar el escritor (en el caso feliz) y siempre cerrar la secuencia. (Sólo para ser confuso, algunos decoradores, por ejemplo para el manejo de cremalleras, tiene los recursos que requieren cierre.)

Otro caso de uso para el lavado en el programa está escrito progreso de longrunning trabajo en el archivo (por lo que se puede detener y reiniciar más tarde. Usted quiere estar seguro de que los datos están seguros en la unidad.

while (true) {
  computeStuff();
  progresss += 1;
  out.write(String.format("%d", progress));
  out.flush();
}
out.close();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top