4

What are the bad things that can happen when I don't close the stream?

Does the close operation automatically flush?

Are all the streams closed after the program exits?

Thanks in advance.

1

3 Answers 3

8

Bad things that can happen when you don't close your streams:

  • you can run out of file handles
  • data that you think is written to disk may still be in the buffer (only)
  • files might still be locked for other processes (depends on the platform)
  • ...

Yes, close operation always flushes the stream.

All file handles that the OS is aware of are closed. This means effectively that FileOutputStream, FileInputStream and the input/output of a Socket will be closed. But if you wrap a FileOutputStream in a BufferedOutputStream then that BufferedOutputStream will not be known to the OS and won't be closed/flushed on shutdown. So data written to the BufferedOutputStream but not yet flushed to the FileOutputStream can be lost.

Sign up to request clarification or add additional context in comments.

5 Comments

SO ALL streams are closed automatically when the program exits..close operation flushes automatically ..so i am safe isn't it
Actually: I've not been entirely correct. I edited my answer.
why FileInputStream and OutputStream are only known to os ..why not BufferedOutputStream
@saravanan: File*Stream represent direct OS resources (namely open file handles). A BufferedOutputStream is a pure Java object that wraps another output-stream. There's no need for the OS to know of its existance.
What happens if the stream goes out of scope? May all resources be recollected, including the file handles, by the GC?
3

1) You tie up system resources unnecessarily (e.g. file descriptors). Possibly to the extent of running out of them.

2) Yes (although you should check the documentation of the particular stream you're interested in to be sure).

3) Yes

1 Comment

In the project I'm working previous person, was not closing file descriptors, after few days of running there were thousands of exceptions :D
1

To qualify, when you perform a close(), it flushes the data and closes the file handle. If you exit, the file handle is closed but un-flushed data is lost.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.