-2

今、これは私が多くの場所を検索し、多くのコーディングを行ったが、まだ非常に混乱している質問です. 私はJavaが初めてなので、オブジェクトデータをシリアル化されたオブジェクトとして保存するこのプログラムを書いていました。データ メンバーは 2 つの文字列です。オブジェクトがシリアル化されてファイルに保存されると、オブジェクト全体の状態が保存されることを読みました。真実。また、データはバイナリ形式であり、人間や通常のテキスト エディターでは読み取ることができません。したがって、writeObjectを使用してオブジェクトを保存すると、データは正常に保存されましたが、ファイルを開くと、文字列が分散した多くの意味不明なデータが含まれています。もう少しよく見ると糸がはっきりとわかります。それで、文字列は数字の場合のように別のものに変換されますか??

4

2 に答える 2

1

それで、数字の場合のように、文字列 nit は別のものに変換されますか?

文字列は、長さのプレフィックス付きの変更された UTF-8 でシリアル化されていると思います。

一般に、シリアル化されたデータは人間が簡単に読み取ることはできませんが、これを読み取りたい人に対する保護として扱うべきではありません。シリアライゼーション形式は十分に文書化されており、それが Java バイナリーシリアライゼーションの結果であることを知っている人なら誰でも、そこから重要なデータを取得できる可能性があります。

データを安全に保つ必要がある場合は、別のスキームシリアライゼーションが必要です。(他のシリアライゼーション オプションも調査することをお勧めします。私は Java シリアライゼーションの大ファンではありません。Java シリアライゼーションは非常に脆弱です。コードの変更に直面して、データの後方互換性と前方互換性を維持することは、少し困難です。)

于 2013-03-27T18:48:08.270 に答える
0

シリアル化の結果を読み取れないようにする必要があるという制約はありません。文字列をシリアル化する場合、文字列をデータに配置する必要があり、その長さと一緒にそのまま配置することもできます。

シリアル化は可能な限りコンパクトな形式ではないため、文字列がバイト ストリームに追加される前に何らかの形で圧縮されていなくても驚かないでください。

于 2013-03-27T18:49:20.780 に答える