0
目標是一次從文件中讀取一個RECORD。每個記錄是16個字節。下面的代碼一次從文件中讀取一個ELEMENT。我如何改變fread()來一次讀取全部16個字節?數據讀取性能優化
目標:一次從磁盤讀取一條記錄中的數據(在單個fread()調用中從磁盤讀取16個字節),然後將其分成單獨的元素。
//Original unoptimized code to read one ELEMENT at a time
// Read the file in a naive way:
// One data item at a time!
struct record read_record_naive(FILE *fp, int endian)
{
struct record my_data = {0,0,0,0,0};
int result;
uint8_t empty=0;
my_data.valid = 1;
result = fread(&(my_data.my8), sizeof(my_data.my8), 1, fp);
if(!result)
{
my_data.valid = 0;
return my_data;
}
result = fread(&(empty), sizeof(empty), 1, fp);
if(!result)
{
my_data.valid = 0;
return my_data;
}
result = fread(&(my_data.my16), sizeof(my_data.my16), 1, fp);
if(!result)
{
my_data.valid = 0;
return my_data;
}
result = fread(&(my_data.my32), sizeof(my_data.my32), 1, fp);
if(!result)
{
my_data.valid = 0;
return my_data;
}
result = fread(&(my_data.my64), sizeof(my_data.my64), 1, fp);
if(!result)
{
my_data.valid = 0;
return my_data;
}
if(endian == ENDIAN_LITTLE)
record_swap_endian(&my_data);
return my_data;
}
如果你正在將整個數據結構寫入文件,那麼你應該簡單地按照@Serge Ballesta的答案來做,但是如果你有不同不同實體的數據,那麼你需要像你一樣一個一個地把它取出來。 – ravibhuva9955 2014-11-03 08:17:06