As far as I know, the docs are vague about this. Close() "Closes the stream and releases any system resources associated with it." It's not really clear what "any system resources" means, and it's not clear why they never explicitly name the specific things that do get "released". But in practice, close() on BufferedReader does indeed call close() on the underlying stream. This can be verified by looking at the source code, if you like. The same is true for other similar IO classes that wrap some other underlying stream - OutputStreamWriter, FilterReader, etc. They all close the underlying stream, even though none of them properly document it.