Re: FileOutputStream questions
On 12/25/2012 6:36 AM, Roedy Green wrote:
I have just realised I do not understand some basic things about
unbuffered FileOutputStream.
I used them in two ways, wrapping in a BufferedOutputStream or
BufferedWriter, or writing an entire file in one i/o without
buffering.
If you write single bytes at a time, will you trigger physical I/O on
every byte, or is there some small buffer in there anyway?
I have experimented with flush during file write. The file size stays
at 0 until I close, at least to DIR.
What I want is to log bytes that will be largely recoverable even if
the program terminates unexpectedly without closing. Flush does not do
it. Close/reopen periodically seem at bit heavy handed. Is there
something I am missing?
I use a buffered output stream with the file opened in append mode to
keep some log files. I flush those after every write.
"If the intended destination of this stream is an abstraction provided
by the underlying operating system, for example a file, then flushing
the stream guarantees only that bytes previously written to the stream
are passed to the operating system for writing; it does not guarantee
that they are actually written to a physical device such as a disk drive."
I haven't had any problems with the above getting it to write
immediately. All of this has been on WinXP which I assume you probably
are with the mention of DIR.
Under Windows, even the OS has a write buffer. I don't know what causes
it to commit or if a Java stream flush is passed through. I just looked
at the source code and OutputStream.flush() doesn't do anything.
--
Knute Johnson