私は、Javaプロジェクトの中で、私がそれを動作させるために必要なことの1つは、ディスクからオブジェクトを書き込んで読み込むことです。具体的には、オブジェクトごとに固定サイズのレコードを持つ単一のRandomAccessFile
から、指定されたオブジェクトのデータメンバーを書き込んだ後にロードする必要があります。このファイルは、固定サイズのディスクブロックを持つパーティションを表します。Java:オブジェクトデータメンバーをファイルに書き込む最良の方法は何ですか?
これで、すべてのデータメンバーを明示的にバイトに変換するのが、ByteBuffer
です。その後、これらをファイルに書き込んで、後でデータを再ロードして、データメンバーの同じ値を持つ新しいオブジェクトをインスタンス化できるようにしました。私がこのアプローチについて気に入らないことは、すべてのデータメンバーを明示的に変換してByteBuffer
に入れて書かなければならないことです。ロードするだけで、逆の処理が行われ、すべてのバイトが変換され、適切な型のオブジェクトに格納されます。
私が上記で使用したアプローチは、あまりにも複雑です。より良い方法、簡単な方法はありますか?私が考えていたのは、C++でできることと似たものです。過去には、オブジェクトへのポインタを使用して固定サイズのインデックス付きレコードからオブジェクトデータを保存してリロードした後、へのポインタをreinterpret_cast
にキャストした後に、ofstream
(または同様のもの)ですべてのバイトを書き込んでいました。 ifstream
(またはそれに類似したもの)を含むファイルを読み込むのは、インデックス* sizeOf(Foo)
を使用してファイルポインタのオフセットを計算してから、ファイルからメモリに読み込む前にシークするだけで簡単です。
Javaでこのアプローチに類似したものはありますか?
タイプがPODタイプでない場合、あなたのC++のアプローチは悲惨に失敗します。あなたはオブジェクトのシリアル化について読んでおく必要があります。 – PaulMcKenzie
関連オブジェクトのリスト/配列を固定長のレコードに持つオブジェクトを保存するにはどうすればよいですか? – Andreas
これらのオブジェクトへのランダムアクセスは、ディスク上のファイルではなくデータベースに書き込むことで、より便利に解決できるタスクのようです。これを困難にするいくつかの制約がありますか? –