シリアライズ

出典: フリー百科事典『ウィキペディア(Wikipedia)』
ナビゲーションに移動 検索に移動

コンピュータプログラミングにおいて、シリアライズ (serialize)、もしくはシリアル化 という用語は、次のような異なる2つの意味を有する。

  1. コンピュータ実行時の用語として:一つあるいは複数の「コンピュータ資源」(コンピュータ作動時に必要なもの、通常プログラム実行時に要求されるコンピュータリソース、具体例:CPUメモリ入出力先など)を、複数の主体(具体例:プログラム)が利用しようとする際、一時点に一つの主体だけが利用するように、順番づけて調整すること。訳語は逐次化。対義語は並列化
  2. プログラミング用語として:一つまたは複数のデータファイル、あるいは一つまたは複数のオブジェクト(ある時はオブジェクトのネットワーク(グラフ)構造)といったいった、概念的あるいは事実上、複数の別のものとして取り扱っているエンティティを、例えばネットワークで転送する、ストレージに一時格納するなど、「一つのまとまりとして取り扱う必要」がある場合、「階層をもたないフラットな(直線的な)データ構造に変換する」こと。具体例:文字列、バイト列)。訳語は直列化オブジェクト指向プログラミングでは同義語としてMarshalling (マーシャリング)がある。対義語は直列化復元ないしデシリアライズである。

シリアライズの名詞形はシリアライゼーション (serialization)である。

概要[編集]

逐次化[編集]

第一の意味の逐次化(ちくじか)は、主としてマルチスレッドプログラミングにおいて使われる用語で、この場合、ある資源が複数のスレッドから同時にアクセスを受け付けられるようになっていないとき、つまりマルチスレッド対応でないときに、マルチスレッド環境からもその資源を利用できるようにするために、同時のアクセス要求が起こったときには、それぞれのスレッドが順番にその資源を利用するように調整することをいう。一般には、これはその資源をロックできたひとつのスレッドのみがその資源の利用権を得、ロック中には他のスレッドはその資源をロックできない機構(排他制御)を用いるか、要求をキューに入れ、順次取り出して処理することにより実現される。

直列化[編集]

第二の意味の直列化(ちょくれつか)は、オブジェクト指向プログラミングにおいて使われる用語で、ある環境において存在しているオブジェクトを、バイト列やXMLフォーマットに変換することをいう。より具体的には、そのオブジェクトの状態を表す変数(フィールド)と、場合によってはオブジェクトの種類(クラス)を表すなんらかの識別子を、ファイル化できるようなバイト列やXMLフォーマットの形に書き出すことをいう。これにより、オブジェクトの表すデータを、ファイルとしてセーブしたり、ネットワークで送信したりすることができるようになる。このようにして得られたバイト列やXMLフォーマットは、直列化復元ないしデシリアライズによって、元のオブジェクトに復元される。

また、オブジェクトを直列化してファイルなどの永続記憶に保存することを永続化という。

各プログラミング言語の対応[編集]

Java[編集]

Javaではシリアライズしたいクラスにjava.io.Serializableまたはjava.io.Externalizable インターフェイス英語版を実装することで、そのクラスオブジェクトをシリアライズできる[1]。これらのインタフェースのうち、Serializableマーカーインタフェースと呼ばれる、メソッド宣言がないものである。

PHP[編集]

PHPでは標準で実装しており、シリアライズはserialize()、デシリアライズはunserialize()を使う。オブジェクトをシリアライズするとメソッドを除いて保存される[2]

出典[編集]

  1. ^ Javaオブジェクト直列化仕様” (日本語). オラクル. 2007年12月8日閲覧。
  2. ^ PHP: オブジェクトのシリアライズ - Manual” (日本語). PHP Group. 2020年8月27日閲覧。

関連項目[編集]