繁体   English   中英

关闭InputStream

[英]Closing an InputStream

我有一个InputStream传递给InputSource:

int resID = getResources().getIdentifier("c" + getCfrFile(), "raw", getPackageName());  
InputStream ins  = getResources().openRawResource(resID); 
InputSource xmlSource = new InputSource(ins);   

xmlTableRowLoader = new AcmTableRowLoader(handler, xmlSource, this, pathBuilder(false), "title");

如何正确关闭InputStream? 当我尝试关闭它时:

ins.Close();

我得到一个java.lang.NullPointerException,因为流在​​“ xmlSource”完成之前被关闭了。 同样,对象“ xmlTableRowLoader”扩展了线程。

这取决于AcmTableRowLoader的使用方式。 如果只在其构造函数中使用它,我对此表示怀疑,那么在上述方法中将其关闭可能是有效的。 但是,由于似乎AcmTableRowLoader在构造函数之外的其他地方使用它,所以我建议让AcmTableRowLoader创建并关闭流本身,因为它知道何时完成处理。

或者简而言之,在关闭xmlSource之后将其关闭。 在没有更多上下文的情况下,很难确切地说出位置/方式。 看起来您刚刚跳了枪。

尝试关闭从其读取的线程中的Stream,当parse()返回时,可以关闭该流。 如果要在另一个线程中关闭流,可以查看AsyncTask。

最佳做法是将整个代码放入try{ ... }catch块中,并在您应关闭输入流的位置添加一个finally块。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM