Qt反射内存读取大文件

     近期写程序,需要对大文件进行读写操作,使用传统的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()

 

  • 4
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值