近期寫程式,需要對大檔案進行讀寫操作,使用傳統的QFile發現效率及其地下,于是想到了記憶體映射。一查檔案發現QFILE自帶一個map函式,看了半天沒有理解如何使用。本人新手,以前未接觸過記憶體映射,有哪位能給小弟發個QT下使用記憶體映射的例子,感激不盡。只需要一段如何使用的代碼段即可,謝謝了。 這種事文本格式,求段代碼怎么把格式讀出來用記憶體映射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.087QFile 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()看到網上有這篇內容,不會怎么修改,求用檔案映射把這個內容讀出來,小弟感激不盡
uj5u.com熱心網友回復:
能否把檔案內容改為二進制保存,這樣一個浮點數統一是32bit,你用記憶體映射很容易讀取。如果是文本格式的話,每個數字都要占一個位元組,而且數字與數字之間怎么分也不知道。uj5u.com熱心網友回復:
你給的列子已經完全展示了QFile記憶體映射的用法。檔案內容都已經直接可用了,如果你仍然有疑問,那就和記憶體映射以及檔案讀取什么的沒有關系了。uj5u.com熱心網友回復:
請教一下各位,使用檔案映射的話,計算MD5會不會快一點?uj5u.com熱心網友回復:
fpr 就相當于整個映射的起始地址,然后你想讀哪個地址的就在這上邊增加就可以。txt讀出來的肯定是ASCII碼,你還要一個一個位元組的轉。二進制的好一些,你直接取地址,給對應的double。uj5u.com熱心網友回復:
fpr就是一個uchar的指標啊,你讓qDebug輸出這個指標干嘛……并且還是在unmap之后,就算你想輸出指標對應的內容,這個時候干這事是不是已經晚了,就跟你delete一個物件之后還去呼叫他一樣uj5u.com熱心網友回復:
if(fpr){
for(int r=0;r<xxx;r++)
{
qDebug()<<char(*fpr);
fpr++;
}
unmap(fpr);
}
file.close()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/99454.html
標籤:其他技術討論專區
上一篇:在線等,求演算法大神判斷曲線走勢
