0

基本的に、文字列オブジェクトのファイルがあります。オブジェクトの格納にはJava ObjectOutputStreamを使用しました。オブジェクト(文字列)にランダムにアクセスすることは可能ですか?たとえば、11番目のオブジェクトにアクセスしたい場合、readObject()を11回使用してその場所にループすることなく、その場所にジャンプできます。また、ジャンプして戻りたい場合は、最初からループしなくても実行できます。ありがとう。

示唆されているように、skipBytes() メソッドを使用して何らかのランダムアクセスを実現できると思います。オブジェクトが固定サイズであることを保証することはできませんが、それらのオブジェクトの位置の配列をファイルに保持できるとしたら、その配列をインデックスとして使用し、skipBytes() をランダム アクセスに使用できます。とにかく、実際にオブジェクトを書いているときにオブジェクトのサイズを知ることができたので、どうにかして位置を記録できたのでしょうか?

4

4 に答える 4

1

文字列オブジェクトを格納するために使用ObjectOutputStreamすることは完全にやり過ぎです。あなたはすでに開始位置のインデックスを使用することを考えました。次に、-を使用して文字列をファイルに直接格納しないのはなぜですか?固定長エンコーディング(バイト数==文字列の長さ、場合によっては* 2)を使用して文字列をFileOutputStreamラップするか、各文字列で個別に使用して、結果のバイト配列の長さ。OutputStringWritertoBytes(encoding)

于 2011-05-13T14:54:32.617 に答える
1

これを行う唯一の方法は、同じファイル内または異なるファイル内のいずれかで、オブジェクトを独自のストリームに個別に保存することです。

最も簡単な方法は、オブジェクトをリストに格納し、そのリストを 1 回の読み取りで読み取り、リストにランダムにアクセスすることです。

于 2011-05-13T14:11:05.437 に答える
1

これは では不可能ObjectInputStreamです。ランダム アクセスが必要な場合は、最初にランダム アクセスをサポートするコレクション/配列にすべてのオブジェクトを読み込む必要があります。

于 2011-05-13T14:12:06.377 に答える
0

まず第ObjectOutputStream一に、そのファイル内のオブジェクトのサイズを知ることができないため、それ自体はそれを行うことができません。実際には、オブジェクトが同じタイプであることさえ認識できません。

オブジェクトが固定サイズであり、そのサイズ知っていることが確実にわかっている場合は、skipBytes()メソッドを利用できますが、本当にそれを知っているとは思えません。


編集:私の答えを受け入れてくれてありがとう、しかし(物事を明確にしてください):私の意図は、あなたが言及した要件を考慮してこれを行うことができる1つの方法を示すことでしたが、これは決して行うべき方法ではありません、私の意見では. :)

于 2011-05-13T14:14:55.637 に答える