輸入流寫入持久化卷
有乙個簡單的需求:有乙個輸入流inputstream,要將其寫入持久化卷;寫了幾版,總是報coverity有記憶體洩露;寫下解決過程
第一版:
private
static
void
writeuserimportfile
(inputstream is)
throws ioexception
in.close()
; out.
close()
;}
/***
問題:leaked_resource: variable 「out」 going out of scope leaks the resource it refers to
**/第二版:之前以為上層有try—catch保護,但似乎沒有保護到,重新在此函式中顯示用try語句保護
private
static
void
writeuserimportfile
(inputstream is)
throws ioexception
}finally
}
/***
finally語句避免了記憶體洩露
**/第三版:優化try語句比較臃腫,可以簡化;檔案可以引數傳遞,函式更通用
private
static
void
writeuserimportfile
(inputstream is, file targetfile)
throws ioexception
}}
總結:對於io操作,保護要做到位,可以先採用穩妥的方法實現,後續根據需求優化; 標準輸入流
get 從流中提取字元,包括空格 read 無格式輸入指定位元組數 getline 從流中提取一行字元 ignore 提取並丟棄流中指定字元 peek 返回流中下乙個字元,但不從流中刪除 gcount 統計最後輸入的字元個數 seekg 移動輸入流指標 int get cin.get char rc...
緩衝輸入流
快取輸入流 bufferedinputstream繼承於filterinputstream,提供緩衝輸入流功能。緩衝輸入流相對於普通輸入流的優勢是,它提供了乙個緩衝陣列,每次呼叫read方法的時候,它首先嘗試從緩衝區裡讀取資料,若讀取失敗 緩衝區無可讀資料 則選擇從物理資料來源 譬如檔案 讀取新資料...
HDFS資料寫入流程
1 client 發起檔案寫入請求,通過 rpc 與 namenode 建立通訊,namenode檢查目標檔案,返回是否可以上傳 2 client 請求第乙個 block 該傳輸到哪些 datanode 伺服器上 3 namenode 根據副本數量和副本放置策略進行節點分配,返回datanode節點...