我真的很大的文件,其中包含数据包。文件本身就是一个非常大的字符串,并且这些软件包与一个字符串“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