近期写程序,需要对大文件进行读写操作,使用传统的QFile发现效率及其地下,于是想到了内存映射。
QFile写文件:
QFile f("c:\\test.txt");
if(!f.open(QIODevice::WriteOnly | QIODevice::Text))
{
cout << "Open failed." << endl;
return -1;
}
QTextStream txtOutput(&f);
QString s1("123");
quint32 n1(123);
txtOutput << s1 << endl;
txtOutput << n1 << endl;
f.close();
QFile读文件
QFile f("c:\\test.txt");
if(!f.open(QIODevice::ReadOnly | QIODevice::Text))
{
cout << "Open failed." << endl;
return -1;
}
QTextStream txtInput(&f);
QString lineStr;
while(!txtInput.atEnd())
{
lineStr = txtInput.readLine();
cout << lineStr << endl;
}
f.close();
把下面几百MB的txt文本读出来
410275.57 4207529.63 598.282
410275.90 4207542.12 616.827
410276.22 4207554.62 638.021
410276.54 4207567.11 656.056
410276.87 4207579.61 686.688
410277.19 4207592.10 701.087
为了省时省事,可以考虑反射内存
QFile file(fileName);
file.open(QIODevice::ReadWrite );
uchar* fpr = file.map(0, file.size());//映射文件,注意这里的file.size()如果大于系统的虚拟内存,就要对文件分块映射
//其实对于大文件一般都是进行分块映射的。
if(fpr)
{
//do something to fpr
unmap(fpr);
}
file.close()