I read this question Using flush() before close() , and the accepted answer is this only means you follow the pattern.
Just like BufferedWriter#close() or FilterOutputStream.#close() , if all of buffered Stream/Writer will call its flush()
when we call close()
and if we (the dev and the dev who will review the code) all know the that, do we really still need this? If yes, what will be the reason?
As the javadoc says, you don't need to flush yourself. But, it's still good to do, considering your readers, and common sense.
Few experts know the javadoc by heart. I wouldn't know for sure if the stream will be flushed or not without looking it up, and I'm probably not alone. Seeing the explicit
flush()
call makes this perfectly clear, and therefore makes the code easier to read.Furthermore, the method name
close()
implies nothing about flushing. It's from theCloseable
interface, and naturally, it says nothing about flushing. If you don't flush a buffered output stream before closing, despite wanting to flush it, you'll be relying on assumptions that may or may not be true. It would weaken your implementation.Any assumptions you make, you should somehow pass on to future maintainers. One way to do that is by leaving a comment:
If you don't leave this comment, future maintainers may have to lookup the javadoc too, if like me they don't have it memorized. But then, why would you write such comment when it's easier and better to just call it yourself now and be done with it.
In short, flushing first before closing is simply following good logic. No need for assumptions and second guesses, and no need to make your readers think.