我正在创建一个接受单个InputStream作为参数的
Java方法.为了方便使用基于字符的流,我将在提供的InputStream包装方法实现的开始如下:
public void doStuff(InputStream inStream) { BufferedReader reader = new BufferedReader(new InputStreamReader(inStream)); ... }
由于InputStream(inStream)传递给我的方法,我不想关闭它…因为我认为这应该是客户端调用我的方法的责任(这是否正确?但是,我认为我应该关闭我创建的BufferedReader;但是在这样做的时候,我相信它会自动关闭所有其他组合流,包括inStream.
有没有人看到一种方法来关闭我在创建的BufferedReader和InputStreamReader,而不关闭传递给我的方法的InputStream?可能有一种方法可以在提供的InputStream的副本包装之前?谢谢
解决方法
当您不想关闭底层阅读器时,您不需要关闭BufferedReader或InputStreamReader或大多数读者实现.
这些读者没有任何资源,关闭()的调用将免费,并且垃圾回收器将无法自由(例如本机资源或静态变量中的值),当您将引用放在读者的最后方法.
与本机资源通信的底层输入流,例如FileInputStream或从URL获取的流必须关闭才能释放这些本机资源.
对于Writer来说,close()通常调用flush()有一个区别.但是,您可以直接调用flush().