1

詳細:

私のプログラムは、5 つのクラスがすべて集約された成績表です。GradeBook にはコースがあり、Course にはカテゴリがあり、Category には Grades (すべて ArrayLists) があります。私のプログラムには、深い集約のためにオブジェクトへの参照を返すことだけを目的とする StateManager もあります。私のドライバーでは、GradeBook のインスタンスは作成しませんが、参照を返すメソッドを持つ GradeBook の静的インスタンスを持つステートマネージャーを作成します。

私の目標は、このデータをすべて保存して、プログラムを再実行したときに再度開くことです。

質問:

ファイルを作成するときは、StateManager オブジェクトを作成するだけですよね?私はこれさえ達成したと思います。プログラムに「gradebook.data」ファイルを作成させます。.data ファイルをテキスト プログラムで開き、正しく書き込まれているかどうかを確認する方法はありますか?

inputstream を使用してオブジェクトを再度開くにはどうすればよいですか? 静的なメイン メソッドまたはすべてのグラフィックスを初期化するメソッドの先頭で?

ありがとう

4

3 に答える 3

1

への参照があるため、シリアライズStateManagerは何もしません。これはそれ自体がコードの匂いですが、シリアル化されないという物理的な影響があります。インスタンスフィールドのみがシリアル化されます。したがって、修飾子を削除します。それ自体をシングルトンにして、それを参照することができます。staticGradeBookstaticStateManagerstatic

GradeBookただし、インスタンスをシリアル化しない理由についてはまだ疑問があります。それははるかに論理的なアプローチになります。通常、サービス オブジェクトをシリアル化するのではなく、データ オブジェクトをシリアル化します。すでにその分離が行われています。

于 2012-05-27T18:09:39.313 に答える
0

最初に使用する前に、プログラムの「早い段階」でデータを読み取る必要があります。StateManager の初期化コードでは、1 つの場所になる可能性があります。

「すべてのグラフィックスを初期化するメソッド」が論理的な場所になる理由がわかりません。

于 2012-05-27T17:46:28.837 に答える
0

いいえ、テキスト エディターはすべての詳細を正しいテキスト形式として表示しません。なぜなら、あなたが書いたものはバイトであり、テキスト エディターはテキストを提供することを望んでいるからです。

ディスクからメモリへのオブジェクトのロード - 2 つのアプローチ

  1. それらを使用しない場合は、ディスクからロードする努力が無駄になり、メモリとCPUを使用しましたが、それ以上使用しませんでした。

  2. 遅延読み込みと呼ばれる最初にアクセスするときにそれらを読み込みます。そのため、StateManager の静的メソッドにアクセスするときに、オブジェクトが null の場合、ディスクから読み込みます。

オフトピック:

シリアライゼーションについて詳しく説明している素晴らしい記事です。

于 2012-05-27T17:46:52.947 に答える