バイナリ ファイルから読み取るときに、現在のファイル ポインターの位置 (バイト単位) を取得する必要があります。を使用してファイルを書きましたがObjectOutputStream
、今度はそれを読んで、各オブジェクトのバイト位置を覚えておく必要があります。
ただしObjectInputStream
、ポインターの位置を読み取る方法は提供されておらず、RandomAccessFile
オブジェクトを読み取ることはできません:(
方法または回避策があると思われる場合は、次の追加情報が役立つ場合があります。
ID をファイルに保存しました。各 ID には、少なくとも 1 つのノードがリストされます (多数のノードの場合もあります)。すべて Long-Value として。
例えば:
ID Node Node ...
123151824812 12419512 1248129412 124912 5992039 1924823590
5238952323942 283492384 234892348 234908234 2348902348 5902303 239235523
...
各 ID は、ID 値自体を long 値として格納し、ノードをArrayList<Long>
.
ノードを格納し、各ノードの親 ID をリストする 2 番目のファイルがあります。このような:
Node ID ID ...
12419512 123151824812
234892348 5238952323942 27834918128911
...
背後にあるアイデアは次のとおりです。ID を知っていて、ノードに関する情報を知りたいときはいつでも、ノード ファイル内の特定の位置にあるノードを調べます。ノードを知っていて、その親 ID について詳しく知りたいときはいつでも、ID ファイル内の特定の位置を調べます。
ただし、現在、ID とノード値自体を「インデックス」として使用してファイルに書き込みました。
これらのファイルは非常に大きくなる可能性があるため (GB サイズ)、探している ID である場合は行ごとに調べたくありません。行インデックスなどではなく、他のファイルのバイト位置を覚えておくと簡単です。なぜなら、skip() または同様のメソッドを使用して簡単にジャンプできるからです。
ObjectInputStream
結論: からの読み取り中に、次のオブジェクトの先頭からファイル ポインターの位置 (バイト単位) を取得する方法