我真的很大的文件,其中包含數據包。文件本身就是一個非常大的字符串,並且這些軟件包與一個字符串「PACK1.0」分開。什麼是遍歷C++中的大文件的好方法
假設「XXX」是數據包看起來像這樣:
PACK1.0XXXXXXXXXXXXXXXXXPACK1.0XXXXXXXXXXXXXXPACK1.0XXXXXXXXXX
我創建一個哈希映射,其中包含包的地方開始的字節數,和。
例子:
PACKAGE NR | BYTE WHERE IT BEGINS IN THE STREAM
0 | 0
1 | 128
2 | 256
. | .
. | .
如果我想包號5340,我看在哪個字節包開始,去與stream.seekg(位置)字節的HashMap和分析數據包,在理論上。
我的最後一個問題是:我要出差槽採用了滑蓋的文件,具有播放暫停&選項。我的想法是滑塊具有min = 0和max = packagecount範圍。
這是遍歷文件的好方法嗎?
這會導致什麼問題?有什麼更好的方法來做到這一點?
這是我的用於存儲的散列映射代碼(該代碼假設一個包是128字節長):
std::map<int, int> THEMAP;
thefile.seekg(0,std::ios::end);
dataLength=thefile.tellg();
thefile.seekg(0,std::ios::beg);
while(position<dataLength)
{
thefile.seekg(0,position);
position=position+128;
packagecount++;
THEMAP.insert(std::make_pair(packagecount,position));
}
考慮到包號是從零開始的連續整數,數組或向量聽起來比散列映射更合適。 – 2013-05-06 20:01:53
更不用說,如果你的軟件包尺寸完全相同,並且提前知道尺寸,則不需要保留地圖。您可以將包裝大小乘以包裝編號。 – OlivierD 2013-05-06 20:20:21
實際上,大小可能會改變..我可以使用本地文件,但也可以通過TCP在網絡上檢索數據。 – Amazonasmann 2013-05-06 20:25:15