[英]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.