By convention, wrapper streams (which wrap existing streams) close the underlying stream when they are closed, so only have to close bufferedreader
in your example. Also, it is usually harmless to close an already closed stream, so closing all 3 streams won’t hurt.