問題タブ [serialversionuid]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - java.io.InvalidClassException: 文字列からオブジェクトへのシリアル化に失敗しました java
Doodle というオブジェクトがあり、それを文字列にシリアル化して問題ありません。オブジェクトをデシリアライズしようとすると問題が発生します。エラーは次のとおりです。 java.io.InvalidClassException: java.util.ArrayList; ローカル クラスに互換性がありません: ストリーム classdesc serialVersionUID = 8664875232659988799、ローカル クラス serialVersionUID = 8683452581122892189
シリアライズとデシリアライズの方法は次のとおりです。
別のタイプのオブジェクトをシリアル化するために同じメソッド(ただし変数は異なります)を使用しますが、そのメソッドは非常にうまく機能します。どこが悪いのかわからない!
java - POJO クラスのシリアル バージョン ID の一意性
もう 1 つばかげた質問です。しかし、過去1時間から頭が回転しているので、聞きたかった.
serialVersionUID が一意であることは誰もが知っています。ユニークさのレベルは?プロジェクト、ワークスペース、またはサーバーで一意にする必要がありますか?
同じワークスペース内の 2 つのクラスに同じ serialVersionUID (コピー ペースト) がある場合、IllegalClassCasteException またはその他の例外が発生しますか?
プロジェクト/ワークスペースごとに一意である場合、Eclipse がデフォルトの serialVersionUID (1L) を提供するのはなぜですか?
java - serialVersionUID 例外
私は現在、シリアル化可能なクラス ClientRepository を持つプロジェクトを書いています。クラスは serialVersionUID を指定しません。プログラムを実行しようとすると、次の例外が発生しました。
だから私はデフォルトのserialVersionUID(1L)を追加しましたが、今は
「ストリームclassdesc serialVersionUID」を1Lに変更して、競合しないようにするにはどうすればよいですか?
ありがとう!
java - Java: ClassNotFoundException が原因でシリアライズ/デシリアライズに失敗しました
私はPilot
クラスとそのクラスのインスタンスを持っています: bobThePilot
.
にシリアル化bobThePilot
し、String
それを自分のハードディスクにコピーします。次に、新しいプロジェクトを作成し、Pilot
クラスを再作成します (以前とまったく同じです)...
そしてnewBobThePilot
、ディスクから取得した文字列をデシリアライズして、この新しいプロジェクトを作成します。しかし、それは失敗します。という名前のものが原因だと誰もが言いましたserialVersionUID
。
それを行うことは可能ですか(異なるクラスでシリアル化および逆シリアル化します(まったく同じクラスですが)?もしそうなら、どのように?
ありがとう。
道徳:
- serialVersionUID 属性をシリアル化されたクラスに追加します 例:
private static final long serialVersionUID = 1L;
implements serializable
シリアル化されたクラスに関連するすべてのクラス
java - 一時変数と揮発変数とシリアル バージョンの uid の間に関係はありますか?
実際、シリアル化の概念と、一時変数とローカル変数が serialversionuid にどのように関連しているか、およびシリアル化が実際にどのように行われているかについて知りたいですか?
java - 1.7 でシリアル化された HashMap を 1.6 で使用できますか?
これにより、マイナーバージョン番号を示すエラーがスローされると思いました。しかし、そうではありませんでした。そして、正しく動作しています。誰でも指摘できますか、なぜこれが機能するのですか?
Java 1.7で実行されているアプリケーションでhashMapを作成し、シリアル化し、jdk 1.6を使用してアプリケーションに送信しました。受信側アプリケーションは、エラーなしでコンテンツを取得できました。
java - getSerialVersionUID が UID を決定するために使用するコンテンツは何ですか?
そのため、構成を保存するときに多くのことをシリアル化する大規模なプロジェクトがあり、その大部分を再設計する必要がありました。多くのクラスの serialVersionUID フィールドを既に定義していたので、UID を再計算する必要があるファイルを知りたいと思いました。
( ObjectStreamClass.lookup(classname) を介して) serialVersionUID の計算にクラスのどのプロパティが使用されたかについて、SO に関する投稿が見つかりませんでした。私は最終的にそれを定義する仕様のスポットを見つけました. したがって、これは、この小さな知識を節約するための自己回答型の質問の 1 つです。
これがエチケットから外れている場合 (仕様に関する質問であるため) お知らせください。喜んで削除します。
では、serialVersionUID を計算する Java 組み込みアルゴリズムを使用する場合、クラスのどの詳細が使用されるのでしょうか?
java - メソッド名が考慮される理由、または serialversionuid のハッシュを生成する理由
連載中に授業があります
しかし、逆シリアル化中に、オブジェクトの状態にまったく影響を与えない追加のメソッド(後述)があり、シリアル化はすべてオブジェクトの状態を保存することであり、なぜ追加のメソッドがserialversionuidのハッシュ生成に貢献しているのか. 現在のシナリオでは、InvalidClassException で失敗します。ただし、この余分なメソッドによってオブジェクトの状態が変更されることはありません。
java - プログラムによる Java ファイルの SerialVersion ID の追加
Hibernate ツールを介してリバース エンジニアリングされた何百もの Java エンティティがあります。Entity クラスはjava.io.Serializable
インターフェイスを実装しているようですが、ありませんserialVersionUID
。
これらのファイルに追加serialVersionUID
する必要があります (最悪の場合、手動で行う必要があります)。他にできる方法はありますか?理想的な解決策は、リバース エンジニアリングの手順自体で行うことですが、パッケージ名を渡しserialVersionUID
てエンティティ クラスに追加することもできます。
Hibernate 3.0を使用しています