データ パッケージを含む非常に大きなファイルがあります。ファイル自体は単純に非常に大きな文字列であり、パッケージは文字列 "PACK1.0" で区切られています。
「XXX」がデータであると仮定すると、パッケージは次のようになります。
PACK1.0XXXXXXXXXXXXXXXXXPACK1.0XXXXXXXXXXXXXXPACK1.0XXXXXXXXXX
パッケージの数とそれが始まるバイト数を含むハッシュマップを作成しています。
例:
PACKAGE NR | BYTE WHERE IT BEGINS IN THE STREAM
0 | 0
1 | 128
2 | 256
. | .
. | .
パッケージ番号 5340 が必要な場合は、ハッシュマップでパッケージの開始バイトを調べ、stream.seekg(POSITION) でそのバイトに移動し、理論的にはパッケージを解析します。
私の最後の問題は、再生と一時停止のオプションを使用して、スライダーを使用してファイルを移動したいということです。私の考えでは、スライダーには 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));
}