Closing BufferedReader without closing wrapped stream
<p>I'm currently writing a program that communicates with a server using TCP sockets. Part of that requires sending information back and forth through several methods. However, I do not want to open up a new socket connection for each request, but I can't guarantee the number or the order of the requests. In order to handle this, I simply keep one socket instance that gets reused a lot.</p>

<p>However, in order to read the data I use <code>BufferedReader</code> wrapper classes. Because I reuse the same socket, I can't call <code>close()</code> on the reader, or I'll close the socket stream as well.</p>

<p>Do I need to call <code>close()</code> on the BufferedReader if I don't want to close the underlying stream? Will I cause a memory leak by not doing this? If I do need to call <code>close()</code> how can I return the memory without closing the socket's stream?</p>

<p>Note: I will close the underlying stream at program termination, this question isn't about that.</p>