輸入流寫入持久化卷

2021-10-12 17:43:53 字數 913 閱讀 1188

輸入流寫入持久化卷

有乙個簡單的需求:有乙個輸入流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節點...