簡體   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