2

サイズブロ​​ックで構造化してファイルを作成しようとしています。基本的に、私は基本的なファイルシステムを作成しようとしています。

ヘッダーを記述してから、同じサイズ/構造の「無限の」可能な数のエントリを記述する必要があります。重要な部分は次のとおりです。

  • データの各ブロックは、個別に読み取り/書き込み可能である必要があります
  • ヘッダーは、それ自体のエンティティとして読み取り/書き込み可能である必要があります
  • このデータを保存し、ファイル内のその場所をすばやく特定できる方法が必要です

ファイルが次のようになると想像します。

[HEADER][DATA1][DATA2][DATA3][...]

このようなものを処理する適切な方法は何ですか?ファイルからDATA3を読み取りたいとしましょう。そのデータチャンクがどこから始まるかをどうやって知ることができますか?

4

3 に答える 3

1

私があなたを正しく理解していて、ある種の名前/ IDをDATAチャンクに割り当てる方法が必要な場合は、さらに別のタイプのチャンクを導入してみることができます。

TOCそれを(目次)と呼びましょう。したがって、ファイル構造はのようになります[HEADER][TOC1][DATA1][DATA2][DATA3][TOC2][...]

TOCチャンクには、名前/IDと複数のDATAチャンクへの参照が含まれます。また、次のチャンクへのポインターなどの内部データが含まれますTOC(したがって、各TOCチャンクをリンクリストノードと見なすことができます)。

実行時に、すべてのTOCチャンクは一種のとして表すことができますHashMap。ここで、キーはチャンクの名前/ IDでありDATA、値はファイル内のその場所です。

于 2012-12-22T21:00:12.073 に答える
0

チャンクのサイズをヘッダーに格納できます。チャンクのサイズが可変の場合、実際のチャンクを指すポインターを格納できます。可変サイズの興味深いデザインは、postgresヒープファイルページにあります。http://doxygen.postgresql.org/bufpage_8h_source.html

于 2012-12-22T20:33:12.430 に答える
0

私は逆に働いていますが、これは役立つかもしれません。

バイナリファイル用の逆コンパイラを作成します。通常、既知のバイト数の固定ヘッダーがあります。これには特定のファイルIDが含まれているため、処理しているファイルタイプを認識できます。

その後に、セクション(データのグループ)の数を含む固定バイト数が続きます。この数は、データポインタの数を示します。各データポインタは、データブロックの開始を表す4バイト(または必要なもの)にすることができます。これから、各ブロックのサイズを計算できます。次に、逆コンパイラーはブロックを1つずつ読み取り、各データブロックのファイル内のサイズと場所を取得します。その場合の仕事は、そのバイトのブロックを抽出し、必要なことをすべて実行することです。

一度に1ブロックずつファイルをステップスルーします。最後のブロックのサイズは、ファイルの終わりへの開始ポインターです。

于 2012-12-22T20:54:05.280 に答える