fwrite寫入位元組數與實際不符,解決 重新整理緩衝區

2021-09-20 04:09:54 字數 319 閱讀 1006

遇到這樣乙個情況:

以二進位制形式開啟檔案,迴圈中每次fwrite寫入固定位元組,但每次實際寫入位元組數與fwrite引數都不一樣,有多有少,

但是!迴圈完後總的位元組數是一致的。

於是開啟google搜尋,大多是說不以二進位制開啟的情況下會產生多餘位元組,自動新增\n等,顯然與我的情況不符。

進一步搜尋,問題得到了解決:

c庫函式寫檔案通過緩衝區,所以產生每次fwrite位元組數不一的情況,是因為沒有及時重新整理緩衝區(這樣設計可能是為了位元組對齊提高效率吧,猜的...)

所以,在每次fwrite後,呼叫一次fflush(),重新整理緩衝區,即可解決問題。

fread實際讀取位元組數少於指定位元組數的問題

segy 資料讀取過程中採用如下語句讀取 道 file fp fopen segyfilename,r fseek fp,3600,seek set int ns 999 size t segysize 240 sizeof float ns size t act size of read frea...

int float寫入位元組資料各位元組序的實現

int與位元組陣列轉換比較簡單,用變數位與oxff等和移位即可實現,因為變數位與0xff等已經不受計算機cpu大小端序的影響,可直接實現,如 define byte0 littleend val static cast val 0xff define byte1 littleend val stat...

List與陣列占用位元組數

想看一下list序列化後占用多少個 位元組,測試程式如下 public static void main string args throws ioexception system.out.println 元素數 list.size bytearrayoutputstream baos new by...