お世話になります。
Java(アプレットとして使用しています。)を最近から勉強し
始めました。
現在、作成しようとしているプログラムは、C言語で言うところの
構造体の項目をバイナリファイル内の任意の位置に読み書きしたいと
思っております。
現在、Javaでは、構造体の概念が見当たらなかったので、
Classで各フィールドを定義して、各フィールドの値を
ByteBufferでByte配列に配置して、RandomAccessFileでこの配列の内容を書き込んだり、この逆の方法で
読み出したりしています。
この方法だと、各フィールドをわざわざ一つ一つByte配列に
配置しなければならず、面倒です。
他の言語の構造体やレコードの概念の様にフィールドの塊を
一気にランダムファイルに簡単に読み書きする方法は有りませんでしょうか?
ご存知の方がいらっしゃいましたら、ご教示の程、是非よろしくお願いします。
No.1ベストアンサー
- 回答日時:
おそらくそのような方法はないと思います。
Javaのオブジェクトが実際にどのような配置になっているかは処理系依存で、
たとえばフィールドが定義した順番に並んでいるとも限らないですし、
C言語のようにアドレスが丸出しになっていないということもあります。
C言語でも構造体をfwriteで書き出してしまうと移植性が犠牲になりますから、
構造体のメンバをひとつひとつ出力するほうが望ましいとは言われます。
ましてや安全性にとくに気を使っているJavaにそのような機能がないのは致しかたないように思います。
もしオブジェクトを手軽に丸ごと保存したいようならシリアライズが使われます。
「フィールドの塊を一気にランダムファイルに簡単に読み書きする」というのを見る限り、もしかしたらお求めのものはシリアライズなのかもしれません。
そうではなく、どうしてもバイナリファイルの読み書きが面倒であれば、
リフレクションでフィールドを動的に調べて自動的に読み書きすることはできなくもないでしょう。
とはいえ、RandomAccessFileで読み書きするのはごく妥当な方法だと思います。
早速の回答ありがとうございます。
確かにそうですね。
Javaでは一般的にその様な方法が無いと言う事が判って、
すっきりしました。
あまりアクロバティックなことは避けたいので、単純な配列で
扱える様なデータの構造になるように仕様を検討しなおしてみます。
どうもありがとうございました。
まずは、お礼まで。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
main(String[] args) の args...
-
この警告はどうすれば?
-
Javaで文字と数字が混ざったも...
-
【Ajax通信&Java】配列の受け取...
-
2次元リスト
-
ArrayListからBean配列に値をセ...
-
Javaで文字を漢字であるか否か...
-
java(バブルソート/単純挿入ソ...
-
選択した項目を隣のリストへ移動
-
JavaBeansの配列の値取得方法に...
-
C言語でunsigned char配列を連...
-
javaでEUC-JP文字列→UTF-8への変換
-
Javaには、構造体はないんですか?
-
コンストラクタと多重度
-
cloneメソッドについて (java)
-
java
-
javamailで複数人にメールを送...
-
Java 配列に1から25以外の値が...
-
Struts:可変個数のテキストボ...
-
System.err. printlnとSystem.o...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
【C#】ハッシュテーブル(連想...
-
Javaで文字と数字が混ざったも...
-
[Ljava.lang.Stringってなんですか
-
この警告はどうすれば?
-
main(String[] args) の args...
-
C言語でunsigned char配列を連...
-
配列で、値の入っている要素数...
-
C#で動的配列Listの中身をListB...
-
javaで大容量テキストファイル...
-
javaについて
-
javamailで複数人にメールを送...
-
java
-
同じ配列またはクラスを、2回...
-
ページング
-
動的配列確保
-
Javaで文字を漢字であるか否か...
-
csvファイルを2次元配列に格納
-
セッションを使ったint型の値の...
-
javaでEUC-JP文字列→UTF-8への変換
-
『args[]』とは?
おすすめ情報