輸入流的坑

2021-09-28 18:54:47 字數 517 閱讀 6036

fileinputstream fis = new fileinputstream(file);

byte bytes = new byte[1024 * 2];

int id = fis.read(bytes);

你以為接下來

string  str=new string(bytes);

syso....................

這樣只會導致重複元素,因為最後乙個陣列存了少部分讀出來的元素,後面沒有元素了,陣列後部分的元素始終沒有被替換掉,因此和前面重複了

解決辦法  string str = new string(bytes,0,id);   id是此次讀取陣列的位元組數     這樣構建響應的偏移量,只輸出該輸出的就行了

在檔案複製的時候還有這個問題,多餘拷貝了很多東西。因為讀的多了嘛,考的自然也多。

用fileoutputstream     write方法,傳入偏移量即可

fos.write(bytes, 0, id);

標準輸入流

get 從流中提取字元,包括空格 read 無格式輸入指定位元組數 getline 從流中提取一行字元 ignore 提取並丟棄流中指定字元 peek 返回流中下乙個字元,但不從流中刪除 gcount 統計最後輸入的字元個數 seekg 移動輸入流指標 int get cin.get char rc...

緩衝輸入流

快取輸入流 bufferedinputstream繼承於filterinputstream,提供緩衝輸入流功能。緩衝輸入流相對於普通輸入流的優勢是,它提供了乙個緩衝陣列,每次呼叫read方法的時候,它首先嘗試從緩衝區裡讀取資料,若讀取失敗 緩衝區無可讀資料 則選擇從物理資料來源 譬如檔案 讀取新資料...

輸入流cin的狀態

對於標準輸入流cin,有時該操作會發生錯誤,如 include using namespace std int main 當輸入的不是整形int而是字元時,輸入流就會發生錯誤。乙個輸入流一旦發生錯誤,其後的io操作都會失敗。如上面的程式,當輸入字元後,程式就進入死迴圈狀態。這是因為一旦輸入失敗,會產...