java – 如何避免关闭传递给我包装在Reader流中的方法的InputStream?

前端之家收集整理的这篇文章主要介绍了java – 如何避免关闭传递给我包装在Reader流中的方法的InputStream?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在创建一个接受单个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().

猜你在找的Java相关文章