人生のプチ美学を教えてください!!

お世話になります。
 Java(アプレットとして使用しています。)を最近から勉強し
始めました。
 現在、作成しようとしているプログラムは、C言語で言うところの
構造体の項目をバイナリファイル内の任意の位置に読み書きしたいと
思っております。
 現在、Javaでは、構造体の概念が見当たらなかったので、
Classで各フィールドを定義して、各フィールドの値を
ByteBufferでByte配列に配置して、RandomAccessFileでこの配列の内容を書き込んだり、この逆の方法で
読み出したりしています。
 この方法だと、各フィールドをわざわざ一つ一つByte配列に
配置しなければならず、面倒です。
 他の言語の構造体やレコードの概念の様にフィールドの塊を
一気にランダムファイルに簡単に読み書きする方法は有りませんでしょうか?
 ご存知の方がいらっしゃいましたら、ご教示の程、是非よろしくお願いします。

A 回答 (1件)

おそらくそのような方法はないと思います。


Javaのオブジェクトが実際にどのような配置になっているかは処理系依存で、
たとえばフィールドが定義した順番に並んでいるとも限らないですし、
C言語のようにアドレスが丸出しになっていないということもあります。

C言語でも構造体をfwriteで書き出してしまうと移植性が犠牲になりますから、
構造体のメンバをひとつひとつ出力するほうが望ましいとは言われます。
ましてや安全性にとくに気を使っているJavaにそのような機能がないのは致しかたないように思います。

もしオブジェクトを手軽に丸ごと保存したいようならシリアライズが使われます。
「フィールドの塊を一気にランダムファイルに簡単に読み書きする」というのを見る限り、もしかしたらお求めのものはシリアライズなのかもしれません。
そうではなく、どうしてもバイナリファイルの読み書きが面倒であれば、
リフレクションでフィールドを動的に調べて自動的に読み書きすることはできなくもないでしょう。
とはいえ、RandomAccessFileで読み書きするのはごく妥当な方法だと思います。
    • good
    • 0
この回答へのお礼

 早速の回答ありがとうございます。
 確かにそうですね。
 Javaでは一般的にその様な方法が無いと言う事が判って、
すっきりしました。
 あまりアクロバティックなことは避けたいので、単純な配列で
扱える様なデータの構造になるように仕様を検討しなおしてみます。
 どうもありがとうございました。
 まずは、お礼まで。

  

お礼日時:2008/08/18 21:33

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!