我在内存中有一个大数组。我正在使用以下文件将其写入文件:
FILE* fp = fopen("filename", "wb");
fwrite(array, sizeof(uint32_t), 1500000000 , fp); // array saved
fflush(fp) ;
fclose(fp);
并使用以下方法再次阅读:
FILE* fp = fopen("filename", "rb");
fread(array, sizeof(uint32_t), 1500000000 , fp);
fclose(fp);
因为,写需要 7 秒,读需要 5 秒。
实际上,我不必编写整个数组。我必须通过检查一些条件来编写和阅读它。像(示例案例):
#include<iostream>
#include <stdint.h>
#include <cstdio>
#include <cstdlib>
#include <sstream>
using namespace std;
main()
{
uint32_t* ele = new uint32_t [100] ;
for(int i = 0; i < 100 ; i++ )
ele[i] = i ;
for(int i = 0; i < 100 ; i++ ){
if(ele[i] < 20)
continue ;
else
// write ele[i] to file
;
}
for(int i = 0; i < 100 ; i++ ){
if(ele[i] < 20)
continue ;
else
// read number from file
// ele[i] = number * 10 ;
;
}
std::cin.get();
}
出于这个原因,我正在做的是:
写作使用:
for(int i = 0; i < 1500000000 ; i++ ){
if (arrays[i] < 10000000)
continue ;
uint32_t number = arrays[i] ;
fwrite(&number, sizeof(uint32_t), 1, fp1);
}
并阅读使用:fread(&number, sizeof(uint32_t), 1, fp1);
本例:写入需要 2.13 分钟,读取需要 1.05 分钟。
这对我来说是相当长的时间。谁能帮助我,为什么会发生这种情况(在第二种情况下文件大小小于第一种)?以及如何解决这个问题?还有其他更好的方法吗?