Question

Quelle est la meilleure façon de stocker des données entre les pistes de programme en Java? Je sais déjà que vous pouvez utiliser un fichier texte et stocker les informations de cette façon, mais je me demandais s'il y a une meilleure façon de stocker les informations générées par le programme entre les cycles du programme.

En outre, est-il possible de le faire afin de garder l'information sécurisée? Plus précisément, je veux garder l'utilisateur final de pouvoir y accéder.

Était-ce utile?

La solution

  

Je me demandais s'il y avait un moyen   autre plaçant les informations qui sont   genereated par le programme entre les courses   du programme?

Il suffit d'utiliser un ObjectOutputStream pour sérialiser dans un fichier et un ObjectInputStream pour le récupérer.

  

est-il possible de le faire de façon aussi ce   de garder l'information sécurisée? de   l'utilisateur final pouvoir y accéder?

Si le code est exécuté sur le système de l'utilisateur final alors non, il n'y a aucun moyen de les empêcher d'obtenir les données - il est même pas la peine de votre temps à essayer de le coder en quelque sorte, car il est facile d'attacher un débogueur et inspecter son programme état alors qu'il est en cours d'exécution. En tant que format binaire, la sérialisation Java empêche les utilisateurs non techniques de déchiffrage, et ce qui est à peu près le mieux que vous pouvez espérer.

Autres conseils

Je ne l'ai jamais utilisé moi-même, mais je pense que ce du JDK java.util.prefs.Preferences a été initialement conçu pour.

Vous pouvez utiliser Propriétés le stockage d'informations. Si vous voulez le sécuriser, l'exécuter par une sorte de flux de cryptage .

Cryptographie sur les fichiers ou base de données locale avec mot de passe.

Vous pouvez utiliser db4o pour stocker les données. Il est une base de données objet et prend en charge le cryptage.

Vous pourriez être intéressé par persistance quick'n'dirty pour Java .

Certaines personnes ont suggéré d'utiliser la sérialisation. Prenez garde qu'il ya un certain nombre d'inconvénients à la sérialisation.

  • Le problème de versioning. Si vous changez quelque chose dans les classes qui sont des fichiers sérialisés, puis un numéro de série écrit avec l'ancienne version de votre programme ne peut être lu facilement plus.
  • Vous ne connaissez pas le format de fichier exact. Ce sera vraiment dur si vous voulez écrire un autre programme plus tard, peut-être dans un autre langage de programmation, qui doit lire le fichier.

sérialisation est pas bien adapté pour le stockage à long terme.

Je suggère d'utiliser une petite base de données intégrée à la place. (Une base de données intégrée est une base de données qui fonctionne dans le même processus que votre programme). Notez que Sun Java comprend Java DB , qui est une version d'Apache Derby. Il y a aussi HSQLDB , qui est une autre petite et base de données pure Java qui peut être utilisé comme une base de données intégrée.

La meilleure chose à utiliser pour commencer Java est d'utiliser un ObjectOutputStream ou un fichier texte. Une fois que vous avez plus d'expérience, vous pouvez utiliser des bases de données.

Qu'en est-sérialisation?

Il ne peut pas être lu par l'utilisateur et il est relativement facile.

Comme d'autres l'ont dit, il y a une multitude de façons de sérialiser données. Vous pouvez utiliser quelque chose de léger comme SQLite ou tout simplement sérialisation plaine. Il suffit de se rendre compte que toute tentative de vous faire pour chiffrer les données peuvent être défaits, en particulier dans le cas du code Java car il peut être facilement inversée.

Cependant, si la majeure partie de vos utilisateurs ne sont pas assez technique pour comprendre la complexité de l'ingénierie inverse d'un programme Java pour comprendre comment déchiffrer vos données, vous devriez être en mesure de sortir avec des méthodes de cryptage de base comme ce qui a été mentionné dans une autre réponse et d'être bon. Il suffit de se rendre compte que chaque fois que quelque chose se trouve sur une machine que vous ne contrôlez pas, il n'y a aucun moyen de garder les utilisateurs les plus persistants de déterminer comment le casser.

Personnellement, je suggère d'utiliser SQLite et en utilisant une simple cryptage des données que vous mettez dans les champs donc si quelqu'un est assez intelligent pour être en mesure de se connecter au fichier DB local, ils ont encore à inverser votre algorithme de chiffrement d'une certaine manière . 99,9% des utilisateurs réguliers ne dérangera pas avec ce niveau d'enquête.

XML comme une technique de sérialisation résiste mieux aux changements à venir dans votre programme qui ajustera le stockage que les formats binaires tels que l'objet sérialisation. Quoi qu'il en serait très lisible et modifiable par la plupart des utilisateurs.

Une compression / décompression simple arrêterait presque tous les utilisateurs d'obtenir au contenu réel des données. L'utilisation de GZipInputStream / GZipOutputStream autour de votre flux en cours d'écriture fera le travail. Plus élaborer votre défense contre les indiscrets vous obtenez plus il aura un impact sur les utilisateurs de votre logiciel.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top