txt文件或JDOM或DOM或[关闭]。

问题描述 投票:2回答:3

我想用Java保存一些数据,但我不想使用数据库(MySQL,......).程序的属性将被保存在一个文件中,每秒更新500次,并在程序执行时加载一次。这个程序可能会运行5个小时以上.这个程序的性能(速度)很突出。


谢谢你的回答。我不能使用RAM,因为如果我的电脑意外关机(例如电源线拔掉),我就会丢失我的信息。我保存更新一个Long-variable,每秒钟5001024次。

java dom jdom jaxp
3个回答
0
投票

也许可以考虑 谷歌协议缓冲区 来存储你的设置。显然,它们可以被解析写入非常快。但是,如果你想享受它的速度,它将不会以人类可读的格式存储。然而,我不能从你的问题中得出你想要的结论。

基本上协议缓冲区将允许你定义你想要存储的东西,然后生成代码来实际保存这些数据。因为它是以二进制写入的,所以比XML或典型的jave属性文件要快。所以,如果你对性能真的很关键,你应该考虑这个。


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();
}

0
投票

我不确定性能是否合适(尽管我想象它将会很好),但Java有java.util.prefs.Preferences,它被设计用来做这种存储。你至少应该考虑一下它。

你也应该考虑java.util.Properties,它也可以很容易地做到这一点,甚至作为XML......。

JDOM本身(我维护的,因此有一些偏见)将能够做到这一点,这取决于文件的大小,和你的硬件,以及你在输出数据时是否重新格式化(或使用更快的默认 "原始 "格式)。

真正的问题是 "你的问题是什么?" ....

  • 能否做到?
  • 可以用JDOM来做吗?
  • 可以用DOM来做吗?
  • 能否用其他东西做得更好?
  • 能否在Linux上做得比Windows快(我想这是真的......)。
  • 为什么一秒钟要保存500次?为什么不把它缓存起来,然后加载一个 关机钩 来拯救?
© www.soinside.com 2019 - 2024. All rights reserved.