2

Java でデータを保存したいのですが、データベース (MySQL など) を使用したくありません。プログラムの属性はファイルに保存され、毎秒 500 回更新され、プログラムの実行時に 1 回ロードされます。このプログラムは 5 時間以上実行されている可能性があります。このプログラムのパフォーマンス (速度) は際立っています。


回答ありがとうございます。PC が予期せずシャットダウンした場合 (たとえば、電源ケーブルが抜かれた場合)、情報が失われるため、RAM を使用できません。1 つのロング変数を 1 秒あたり 500/1024 回保存/更新します。

4

3 に答える 3

0

これはあなたが探しているものではないかもしれませんが、オブジェクトのシリアル化について考えたことはありますか?基本的に、あなたはあなたのオブジェクトを実装java.io.Serializableし、それからあなたはそれらをに与えてObjectOutputStream言うことができますout.writeObject(yourObject)。とても簡単です。これは、 Javaヘルパーライブラリの書き込みと読み取りのメソッドの例です。

/**
* Saves the given object to the given destination. The object and all it's variables must implement
* java.io.Serializable or the variables must have the keyword "transient" in front of it.
*
* @param object
* @param savePath
* @throws IOException
*/
public static void saveObject(Object object, String savePath) throws IOException {
  FileOutputStream f_out = new FileOutputStream(savePath); //If you want the object to be saved in memory just create a ByteArrayOutputStream instead and return the bytes in this method.
  ObjectOutputStream o_out = new ObjectOutputStream(f_out);
  o_out.writeObject(object);
}

/**
* Opens an object from the given openPath and returns it
*
* @param openPath
* @return
* @throws IOException
* @throws ClassNotFoundException
*/
public static Object loadObject(String openPath) throws IOException, ClassNotFoundException {
  FileInputStream f_in = new FileInputStream(openPath); //If you want the object to be saved in memory just give the method a byte[] and create a ByteArrayInputStream instead.
  ObjectInputStream o_in = new ObjectInputStream(f_in);
  return o_in.readObject();
}
于 2012-05-18T12:11:08.730 に答える
0

パフォーマンスの適合性については確信が持てませんが (問題ないとは思いますが)、Java には、この種のストレージを行うように設計された java.util.prefs.Preferences があります。少なくともそれを考慮する必要があります。

また、XML としても簡単に実行できる java.util.Properties も考慮する必要があります。

ファイルのサイズ、ハードウェア、および出力時にデータを再フォーマットするかどうか (または高速/デフォルト「生」形式)。

本当の質問は「あなたの質問は何ですか?」です。....

  • それはできますか?
  • JDOMでできますか?
  • DOMでできますか?
  • それは何か他のものでより良くすることができますか?
  • Linux では Windows よりも高速に実行できますか (これは本当だと思います...)
  • なぜ1秒間に500回保存するのですか? それをキャッシュして、シャットダウンフックをロードして保存してみませんか?
于 2012-05-18T10:45:12.597 に答える
0

たぶん、設定を保存するためにGoogleプロトコルバッファを検討してください。どうやら、それらは非常に高速に解析/書き込みできるようです。ただし、その速度を楽しみたい場合は、人間が読める形式で保存されません. あなたの質問からは、あなたがそれを望んでいるとは言えません。

基本的に、プロトコル バッファを使用すると、格納する対象を定義してから、そのデータを実際に保存/ロードするコードを生成できます。バイナリで書き込むため、XML や一般的な java プロパティ ファイルよりも高速です。したがって、パフォーマンスが本当に重要である場合は、これを検討する必要があります。

于 2012-05-18T12:03:34.307 に答える