Short question,
I saw in some old code where a ByteArrayInputStream
was created like:
new BufferedReader(new InputStreamReader(new ByteArrayInputStream(somebytes)));
And then the BufferedReader
is used to read out somebytes
line by line.
All working fine, but I noticed that the BufferedReader
is never closed.
This is all working in a long running websphere application, the somebytes
are not terrible big (200k most), it is only invoked a few times a week and we're not experiencing any apparent memory leaks. So I expect that all the objects are successfully garbage collected.
I always (once) learned that input/output streams need to be closed, in a finally
statement. Are ByteStreams
the exception to this rule?
kind regards Jeroen.
You don't have to close ByteArrayInputStream
, the moment it is not referenced by any variable, garbage collector will release the stream and somebytes
(of course assuming they aren't referenced somewhere else).
However it is always a good practice to close every stream, in fact, maybe the implementation creating the stream will change in the future and instead of raw bytes you'll be reading file? Also static code analyzing tools like PMD or FindBugs (see comments) will most likely complain.
If you are bored with closing the stream and being forced to handle impossible IOException
, you might use IOUtils:
IOUtils.closeQuietly(stream);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With