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

StackOverflow https://stackoverflow.com/questions/1285132

Вопрос

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

Возможно, вас заинтересует Быстрая и грязная персистентность для Java.

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

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top