TXT-файл или JDOM или DOM или
Я хочу сохранить некоторую информацию в Java, но я не хочу использовать базу данных (mysql,...) . Атрибут программы будет сохранен в файле и обновлен 500 раз в секунду и загружен один раз, когда программа будет выполнена. Эта программа может работать 5 или более часов. производительность (скорость) в этой программе является выдающимся.
Я не могу использовать оперативную память, потому что, если компьютер неожиданно выключился (например, отключен кабель питания), я теряю свою информацию. Я сохраняю / обновляю одну длинную переменную, 500/1024 раз в секунду.
3 ответа
Может быть, рассмотрим буфер протокола Google для хранения ваших настроек. По-видимому, они могут быть проанализированы / написаны очень быстро. Однако если вы хотите насладиться его скоростью, он не будет сохранен в удобочитаемом формате. Я не могу сделать вывод из вашего вопроса, однако, что вы этого хотите.
По существу, буферы протокола позволят вам определить, что вы хотите сохранить, а затем сгенерировать код для фактического сохранения / загрузки этих данных. Поскольку он записывает в двоичном виде, он может быть быстрее, чем XML или типичные файлы свойств jave. Так что, если производительность действительно важна, вы должны это учитывать.
Я не уверен в пригодности производительности (хотя думаю, что все будет хорошо), но в Java есть java.util.prefs.Preferences, который предназначен для такого рода хранилищ. Вы должны по крайней мере рассмотреть это.
Вы должны также рассмотреть java.util.Properties, который может легко сделать это, даже как XML....
Сам JDOM (который я поддерживаю и поэтому имею некоторую предвзятость) будет способен на это, в зависимости от размера файла и вашего оборудования, а также от того, переформатируете ли вы данные при выводе (или используете более быстрый / по умолчанию) "сырой" формат).
Настоящий вопрос - "Какой у тебя вопрос?" ....
- это можно сделать?
- это можно сделать с помощью JDOM?
- это можно сделать с помощью DOM?
- это может быть сделано лучше с чем-то еще?
- может ли это быть сделано быстрее в Linux, чем в Windows (что я думаю, правда...)
- зачем вообще экономить 500 раз в секунду? Почему бы не кэшировать его и не загрузить загрузочный хук для сохранения?
Возможно, это не то, что вы ищете, но задумывались ли вы о сериализации объектов? По сути, у вас есть объекты implament java.io.Serializable
и тогда вы можете дать их ObjectOutputStream
и скажи out.writeObject(yourObject)
, Это супер просто. Вот пример метода из библиотеки Java Helper для записи и чтения.
/**
* 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();
}