Java 关闭输入流

Java 关闭输入流,java,android,Java,Android,我有一个传入InputSource的InputStream: int resID = getResources().getIdentifier("c" + getCfrFile(), "raw", getPackageName()); InputStream ins = getResources().openRawResource(resID); InputSource xmlSource = new InputSource(ins); xmlTableRowLoader = n

我有一个传入InputSource的InputStream:

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之后关闭它。如果没有更多的上下文,很难准确说出具体的位置/方式。看起来您刚刚跳了枪。

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

最佳做法是将整个代码放入
try{…}catch
块中,并添加一个
finally
块,在该块中您应该关闭inputstream。

从讨论中可以看出,关闭是导致xmlStream中出现NPE。并不是说ins为空。什么是/does
AcmTableRowLoader
?你有javadoc吗?它如何处理InputSource参数?