8
5

More than 3 years have passed since last update.

Javaにおけるtransient修飾子とシリアライズに関して

Last updated at Posted at 2019-09-27

初めてtransientというフィールド修飾子に遭遇したのでメモ。

private transient long originalTime;

一般的な説明

transientを付与すると該当のフィールドは直列化の対象外となる。
該当の変数を持つクラスを直列化しようとして、NotSerilizabaleExceptionが発生した際にこの修飾子を付与するととりあえず例外は発生しなくなる。

直列化ってなに?

直列化以外にも、シリアライズ、シリアル化などと呼ばれる。
オブジェクトと直列化することはオブジェクトの情報をストリーム化し、ファイルとして保存 or ネットワークを介してやり取りすることが可能になるっぽい。要するにJavaのオブジェクトをバイト列として出力するということ。

どういう時に直列化できないの?

そもそもオブジェクトによっては直列化できる・できないが決まっている。そのようなオブジェクトを持っているクラス自体を直列化しようとすると前述の例外が発生すると思われる。

直列化する方法

あるクラスを直列化するにはjava.io.Serializableを実装すればいい。 シリアライズ化可能ですよー、という証でこのinterfaceを実装すると良い。

個人的なまとめ

  • Javaオブジェクトをファイルに保存したり、ネットワーク経由で伝達する場合は直列化(シリアライズ)が必要。
  • 特定のクラスを直列化するにはSerializableを実装する必要がある。
  • クラスを直列化した時にNotSerilizabaleExceptionが発生することがある。
  • 直列化の対象外にするためにtransientを使う。
8
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5