[解決済み] なぜJavaにはtransientフィールドがあるのですか?
質問
なぜJavaには 過渡的 フィールドがあります。
どのように解決するのですか?
その
transient
キーワードは、あるフィールドが直列化(ファイルへの保存など)プロセスの一部であってはならないことを示すために使用されます。
から
Java言語仕様、Java SE 7版
,
8.3.1.3項を参照。
transient
分野
:
変数にマークが付くことがあります
transient
を使用します。 の一部ではないことを示す。 オブジェクトの永続的な状態です。
例えば、他のフィールドから派生したフィールドがあり、その状態をシリアライズによって永続化させるのではなく、プログラムによってのみ行われるべきです。
ここでは
GalleryImage
クラスは、画像とその画像から派生したサムネイルを含んでいます。
class GalleryImage implements Serializable
{
private Image image;
private transient Image thumbnailImage;
private void generateThumbnail()
{
// Generate thumbnail.
}
private void readObject(ObjectInputStream inputStream)
throws IOException, ClassNotFoundException
{
inputStream.defaultReadObject();
generateThumbnail();
}
}
この例では
thumbnailImage
を呼び出して生成されるサムネイル画像です。
generateThumbnail
メソッドを使用します。
は、その
thumbnailImage
フィールドは
transient
であるため、元の
image
は、オリジナル画像とサムネイル画像の両方を永続化するのではなく、シリアライズされます。これは、シリアライズされたオブジェクトを保存するために必要なストレージが少なくなることを意味します。(もちろん、これはシステムの要件によって望ましい場合もそうでない場合もあります。これは単なる例です)。
デシリアライズ時に
readObject
メソッドが呼び出され、オブジェクトの状態をシリアライズ時の状態に戻すために必要な処理が実行されます。ここでは、サムネイルを生成する必要があるので
readObject
メソッドをオーバーライドして、サムネイルを生成するようにします。
generateThumbnail
メソッドを使用します。
追加情報については、記事
Java Serialization APIの秘密を探る
(これは元々 Sun Developer Network で公開されていたものです) の使用について説明するセクションがあり、そのシナリオでは
transient
キーワードを使用して、特定のフィールドのシリアライズを防止します。
関連
-
Java Error スレッド "AWT-EventQueue-0" で例外発生 java.lang.
-
エラーの解決方法 jarfile XXX.jarにアクセスできません。
-
[解決済み] この2回(1927年)を引き算すると、なぜおかしな結果になるのでしょうか?
-
[解決済み] JavaにおけるHashMapとHashtableの違いは何ですか?
-
[解決済み] Java Mapの各エントリを効率的に反復処理するには?
-
[解決済み] なぜパスワードにはStringではなくchar[]が好まれるのですか?
-
[解決済み] Javaでメモリーリークを発生させるにはどうしたらいいですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] プライベートメソッド、フィールド、インナークラスを持つクラスをテストするにはどうすればよいですか?
-
[解決済み] Javaはパラメータのデフォルト値をサポートしていますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
スレッド "main "での例外をEclipseで解決 java.lang.Error: 未解決のコンパイル問題、コンパイラとパッケージの不整合
-
[解決済み] シリアライザブルオブジェクトgetactivity()を書いていてIOExceptionに遭遇したParcelable
-
Eclipseで "XXXX "の解決策を(型に)解決することができない
-
をインスタンス化することができません。
-
リソースの読み込みに失敗しました。サーバーはステータス500(内部サーバーエラー)で応答しました。
-
javaコンパイル時のエラー:不正な文字 '\ufeff' に対する解決策です。
-
mavenプロジェクトのテストエラー java.lang.ClassNotFoundException: org.glassfish.jersey.client.ClientConfig の問題を解決する。
-
IDEA パッケージステートメントの欠落
-
このラインで複数のマーカーを解決する方法
-
[解決済み] Javaで「transient」というキーワードはどういう意味ですか?[重複しています]。