Javaでプログラムを実行する間にデータを保存する最良の方法は?
-
18-09-2019 - |
質問
Java でプログラムを実行する間にデータを保存する最良の方法は何ですか?テキスト ファイルを使用してその方法で情報を保存できることはすでに知っていますが、プログラムの実行の間にプログラムによって生成された情報を保存するより良い方法があるかどうか疑問に思っていました。
また、情報を安全に保つための方法はありますか?具体的には、エンドユーザーがアクセスできないようにしたいと考えています。
解決
どのような方法があった場合は、私は思っていました その他の情報を配置します 実行間のプログラムによってgenereated プログラムの?
単にそれを取り戻すために、ファイルやObjectOutputStream
にそれをシリアル化するためにObjectInputStream
を使用します。
コードは、エンドユーザーのシステム上で実行されている場合は、またようにそれを行うにはどのような方法があります 情報をセキュアに維持するには?から エンドユーザがそれにアクセスできること?
その後、ノー、データを取得してからそれらを防ぐための方法はありません - それはデバッガをアタッチして、プログラムのを検査するのは簡単ですので、それは、でも何とかそれをエンコードしようとしているあなたの時間の価値はありません状態は、それが動作している間。バイナリ形式として、Javaの直列はそれを解読から、非技術的なユーザーを防ぐことができますし、それはかなりあなたが望むことができるのが最善です。
他のヒント
私はそれを自分自身使ったことがないが、私はそれが何のJDKの<のhref = "http://java.sun.com/j2se/1.5.0/docs/api/java/util/prefs/Preferencesだと思います元々のために設計されたの.htmlを」のrel = "noreferrer"> java.util.prefs.Preferencesます。
あなたはプロパティのためにを使用することができます情報を格納します。あなたはそれが安全なようにしたい場合は、<のhref =「http://java.sun.com/j2se/1.4.2/docs/guide/security/jce/JCERefGuide.html#CipherStream」のrelのいくつかの並べ替えを介して実行= "nofollowをnoreferrer">暗号化ストリームでます。
ファイルの暗号化、またはパスワードを使用して、ローカルデータベースます。
あなたは、データを格納するために db4oのして使用することができます。これは、オブジェクトデータベースだと暗号化をサポートしています。
あなたは、Java の Quick'n'dirty持続性に興味があるかもしれません。
シリアル化を使用することを提案する人もいます。シリアル化には多くの欠点があることに注意してください。
- バージョン管理の問題。シリアル化されたクラスで何かを変更すると、古いバージョンのプログラムで書かれたシリアル化されたファイルは簡単に読み取れなくなります。
- 正確なファイル形式がわかりません。後で、おそらく別のプログラミング言語で、ファイルを読み取る必要がある別のプログラムを作成する場合、非常に困難になります。
シリアル化は長期保存には適していません。
代わりに、小さな組み込みデータベースを使用することをお勧めします。(組み込みデータベースは、プログラムと同じプロセスで実行されるデータベースです)。Sun の Java には次のものが含まれることに注意してください。 Java DB, 、Apache Derby のバージョンです。それもあります HSQLDB, これは、組み込みデータベースとして使用できる、もう 1 つの小さな純粋な Java データベースです。
のJavaを開始するときに使用する最善のことはObjectOutputStreamのか、テキストファイルを使用することです。あなたはより多くの経験を持っていたら、あなたは、データベースを使用することができます。
どのように直列化についてはどうですか?
これは、ユーザーが読み取ることができない、それは比較的簡単です。
、データをシリアル化するために無数の方法があります。あなたはSQLiteのか、単なる直列化のような軽量のものを使用することができます。ただ、それは容易に反転させることができるので、あなたは、データを暗号化するために作成したすべての試みは、特にJavaコードの場合には、敗北することができることを実現します。
ユーザーの大半は、あなたのデータを復号化する方法を見つけ出すためにJavaプログラムをリバースエンジニアリングの複雑さを理解するのに十分な技術的でない場合は、しかし、あなたが言及したもののようないくつかの基本的な暗号化方式で逃げることができるはずです別の答えで良いです。ただ、いつでも何でも、あなたがコントロールしていないマシン上に常駐し、それをクラックする方法を考え出すから最も永続的なユーザーを維持する方法がないことを実現します。
誰かがローカルDBファイルに接続することができるように十分にスマートであるならば、彼らはまだいくつかの方法で、あなたの暗号アルゴリズムを逆にする必要がありますので、私は個人的にあなたがフィールドに入れsqliteのを使用して、データ上でいくつかの簡単な暗号化を使用することをお勧め。通常のユーザーの99.9%は、調査のこのレベルを気にしません。
のシリアル化技術としてXMLは、オブジェクト直列化などのバイナリ形式よりもストレージを調整しますあなたのプログラムで将来の変化に、より弾力的です。しかし、それはほとんどのユーザーが、それは非常に読みやすく、変更になるだろう。
非常にシンプルな圧縮/伸張は、データの実際の内容になってから、ほぼすべてのユーザーを停止します。あなたの現在の書き込みストリームの周りGZipInputStream / GZipOutputStreamの使用は、仕事をするだろう。より多くのあなたがより多くのそれはあなたのソフトウェアのユーザーに影響を与える取得のぞきに対するあなたの防衛を詳しく説明します。