0

クラスオブジェクトのマップと文字列のリストをシリアル化していますが、これは非常にうまく動作します。しかし、私はそれを逆シリアル化しようとすると、ClassNotFoundExceptionを取得しています。 コード:ClassNotFoundExceptionデータを逆シリアル化しているとき

Map<Class<? extends IDomain>, List<String>> mapPresetImport = (Map<Class<? extends IDomain>, List<String>>) ois.readObject(); 

この例外を引き起こした原因は何ですか?

+0

私はあなたが意味するものを得ることはできません、申し訳ありません。私はJavaにとってかなり新しいです。 – pmax1

+0

IDomainはコードからアクセスできますか? – kunpapa

+0

さて、私は今それを得ました。 IDomainはアクセス可能ですが、クラスパスに含まれていない別のパッケージに含まれているため、シリアライズされたクラスは使用できません。最初にクラスを読み込んだり探したりすることなく、そのデータを逆シリアル化する別の方法がありますか? – pmax1

答えて

0

[OK]を今すぐ取得しました。 IDomainはアクセス可能ですが、 のクラスは、クラスパスに含まれていない別のパッケージに含まれているため、クラス化されていません。

コメントに記載されているように、直列化されたクラスはランタイムクラスパスで使用できないため、ClassNotFoundExceptionになります。

データをデシリアライズする別の方法は、最初にクラスをロードしたり探すのではなく、

いいえ、この依存関係は必須です。オブジェクトをデシリアライズする前にクラスをインクルードする必要があります(このような例外が発生しないようにするため)。 Javaで使用される逆シリアル化メカニズムは、逆シリアル化されているクラスを見つける段階で必ず失敗します。

関連する問題