Лучший способ хранения данных между запусками программы на java?

каков наилучший способ хранения данных между запусками программы на Java? Я уже знаю, что вы можете использовать текстовый файл и хранить информацию таким образом, но мне было интересно, есть ли лучший способ сохранить информацию, которая генерируется программой между запусками программы.

кроме того, есть ли способ сделать это, чтобы сохранить информацию в безопасности? В частности, я хочу, чтобы конечный пользователь не мог получить к нему доступ.

11 ответов


мне было интересно, есть ли какой-либо способ другие размещения информации genereated программой между запусками программы?

просто использовать ObjectOutputStream сериализовать его в файл и ObjectInputStream чтобы вернуть его.

также есть ли способ сделать это так, как чтобы сохранить информацию в безопасности? от конечный пользователь может получить к нему доступ?

Если код выполняется в системе конечного пользователя, то нет, нет способ предотвратить их получение данных-даже не стоит тратить время на его кодирование, так как легко подключить отладчик и проверить состояние программы во время ее работы. Как двоичный формат, сериализация Java не позволит нетехническим пользователям расшифровать его, и это в значительной степени лучшее, на что вы можете надеяться.


Я никогда не использовал его сам, но я думаю, что это то, что JDK java.утиль.префы.Предпочтения изначально предназначены.


можно использовать свойства для хранения информации. Если вы хотите сделать его безопасным, запустите его через какой-то шифрование потока.


криптография в файлах или локальная база данных с паролем.


можно использовать в db4o для хранения данных. Это база данных объектов и поддерживает шифрование.


вас может заинтересовать быстрая'с'dirty сохранение для Java.


некоторые люди предложили использовать сериализацию. Помните, что сериализация имеет ряд недостатков.

  • проблема с версиями. Если вы измените что-то в сериализованных классах, то сериализованные файлы, написанные со старой версией вашей программы, больше не могут быть легко прочитаны.
  • вы не знаете точный формат. Это будет очень сложно, если вы хотите написать другую программу позже, возможно, на другом языке программирования, это нужно прочитать файл.

сериализация не подходит для длительного хранения.

Я бы предложил вместо этого использовать небольшую встроенную базу данных. (Встроенная база данных-это база данных, которая выполняется в том же процессе, что ваша программа). Обратите внимание, что Java Sun включает JAVA DB, который является версией Apache Derby. Есть также HSQLDB, которая является еще одной небольшой и чистой базой данных Java, которая может использоваться в качестве встроенной базы данных.


лучше всего использовать при запуске Java, чтобы использовать ObjectOutputStream или текстовый файл. Как только у вас будет больше опыта, вы можете использовать базы данных.


Как насчет сериализации?

Он не может быть прочитан пользователем, и это относительно легко.


Как уже сказали, существует множество способов сериализации данных. Вы можете использовать что-то легкое, как SQLite или просто сериализацию. Просто поймите, что любые попытки зашифровать данные могут быть побеждены, особенно в случае кода Java, так как он может быть легко отменен.

однако, если основная часть ваших пользователей недостаточно технически, чтобы понять сложности обратного проектирования Java-программы, чтобы выяснить, как расшифровать ваши данные, вы должны быть возможность уйти с некоторыми основными методами шифрования, такими как то, что было упомянуто в другом ответе, и быть хорошим. Просто поймите, что всякий раз, когда что-то находится на машине, которую вы не контролируете, нет никакого способа удержать самых настойчивых пользователей от выяснения, как взломать его.

Я лично предложил бы использовать sqlite и использовать некоторое простое шифрование данных, которые вы помещаете в поля, поэтому, если кто-то достаточно умен, чтобы иметь возможность подключиться к локальному файлу DB, они все равно должны отменить ваш крипто алгоритм каким-то образом. 99,9% обычных пользователей не будут беспокоиться об этом уровне расследования.


XML как метод сериализации более устойчив к будущим изменениям в вашей программе, которые будут регулировать хранилище, чем двоичные форматы, такие как сериализация объектов. Однако это сделало бы его очень читаемым и изменяемым большинством пользователей.

очень простое сжатие / декомпрессия остановит почти всех пользователей от получения фактического содержимого данных. Использование GZipInputStream / GZipOutputStream вокруг текущего потока записи будет выполнять эту работу. Чем сложнее ваш защита от посторонних вы получите, тем больше это повлияет на пользователей вашего программного обеспечения.