直列化とは? わかりやすく解説

Weblio 辞書 > 辞書・百科事典 > 活用形辞書 > 直列化の意味・解説 

直列化

日本語活用形辞書はプログラムで機械的に活用形や説明を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ

シリアライズ

(直列化 から転送)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2025/05/03 09:20 UTC 版)

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

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

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

概要

逐次化

第一の意味の逐次化(ちくじか)は、主としてマルチスレッドプログラミングにおいて使われる用語である。ある資源が複数のスレッドから同時にアクセスされても破綻することのないように、同時のアクセス要求が起こったときには、それぞれのスレッドが順番にその資源を利用するように調整(調停)することを逐次化という。逐次化によりプログラムはスレッドセーフとなる。これは一般には、その資源をロックできたひとつのスレッドのみがその資源の利用権を得て、ロック中には他のスレッドはその資源をロックできないような機構(排他制御)を用いるか、あるいはアトミック命令を利用したロックフリーのアルゴリズムを利用することにより実現される[1]。長時間のロックによりスループットが低下することを避けるために、データや要求をいったんキューに入れ、順次取り出して処理する(遅延実行する)ことによりスループットを改善することもあるが、複数のスレッドで共有されるキュー自体の操作はやはり排他制御する必要がある。そのほか、複数のプロセスが同一の資源(ファイルなど)にアクセスするような場合も破綻しないように、同様に何らかの逐次化が必要となる。

直列化

第二の意味の直列化(ちょくれつか)は、主にオブジェクト指向プログラミングにおいて使われる用語である。集合型や階層型の構造を持つ複雑なデータやオブジェクトは、配列連結リスト、ツリーマップなどのネットワーク(グラフ)構造となるが、メモリ上で連続しているとは限らない。ある環境において存在しているオブジェクトを、連続する(シリアルな)バイナリデータやテキストデータ(文字列)に変換することを直列化という。より具体的には、そのオブジェクトの状態を表す変数(フィールド)の集合と、場合によってはオブジェクトの種類(型、クラス)を表すなんらかの識別子を、バイナリやテキストに変換する。これにより、オブジェクトの表すデータを、ファイルとして保存したり、ネットワーク経由で送信したりすることができるようになる。このようにして得られたバイナリやテキストは、デシリアライズによって、元のオブジェクトに復元される。

テキストとしてシリアライズする際のフォーマットとしては、数あるテキストファイル形式の中でも規格として標準化されていて、階層構造の表現をサポートし、デシリアライズが比較的容易なXMLJSONなどがよく使われる。テキストエンコーディングの文字集合には古くから様々な形式が存在するが、Unicodeが普及してからはUTF-8が使われることが多い。UTF-8では、ASCIIの範囲内であれば各文字が1バイト以内(7ビット)で表現できることから、ASCII文字の占める割合が多いデータの場合はシリアライズ後のデータ容量が節約できる。また、バイト単位のエンコーディングであり、エンディアンの影響を受けないというメリットもある。非ASCII文字はマルチバイト文字として表現する必要があるが、日本語のようなマルチバイト文字の占める割合が多いデータの場合は、UTF-8よりもUTF-16のほうがデータ容量を節約できることもある。数値データが多い場合は、バイナリ形式を利用するとさらに容量を節約できるが、もとのオブジェクトを拡張した場合でも互換性を維持するためには、テキスト形式と比べてフォーマット設計の難易度が上がる。なお、浮動小数点数を10進数表記の文字列としてシリアライズすると丸め誤差が発生し、デシリアライズの際に情報を正確に復元できないことがある。

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

各プログラミング言語の対応

Java

Javaではシリアライズしたいクラスにjava.io.Serializableまたはjava.io.Externalizableインタフェースを実装することで、そのクラスオブジェクトをシリアライズできる[2]。これらのインタフェースのうち、Serializableマーカーインタフェースと呼ばれる、メソッド宣言がないものである。このインタフェースは、直列化可能であるという意味を識別する機能だけを備えている。

.NET

.NET Framework/.NET Coreは、各種の属性による修飾を使用したシリアライズの制御をサポートする[3][4]ISerializableインターフェイス[5]を用いる方法も用意されているが、シリアル化の制御では属性を利用した方法が優先される。

BinaryFormatterを使うことでバイナリ形式のシリアライズをすることもできるが、バイナリシリアル化はセキュリティ上の危険性があり、推奨されていない[6][7]

.NET CoreではJSONシリアライズもサポートする[8]

Windows Communication Foundation (WCF) では、データコントラクトを利用してオブジェクトのシリアライズに関するメタデータを記述することで、プロセス間で.NETオブジェクトを簡単に送受信できるようになっている[9]

PHP

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

脚注

出典

  1. ^ CON09-C. ロックフリープログラミングの手法を使うときは ABA 問題を避ける”. JPCERT/CC (2014年6月9日). 2024年2月23日閲覧。
  2. ^ Javaオブジェクト直列化仕様”. オラクル. 2007年12月8日閲覧。
  3. ^ dotnet-bot. “Custom binary serialization” (英語). learn.microsoft.com. 2022年2月23日閲覧。
  4. ^ gewarren. “属性を使用した XML シリアル化の制御 - .NET”. learn.microsoft.com. 2022年2月23日閲覧。
  5. ^ dotnet-bot. “ISerializable Interface (System.Runtime.Serialization)” (英語). learn.microsoft.com. 2022年2月23日閲覧。
  6. ^ ViktorHofer. “Binary serialization” (英語). learn.microsoft.com. 2022年2月23日閲覧。
  7. ^ GrabYourPitchforks. “BinaryFormatter および関連する型を使用するときの逆シリアル化のリスク - .NET”. learn.microsoft.com. 2022年2月23日閲覧。
  8. ^ gewarren. “C を使用して JSON をシリアル化および逆シリアル化する# - .NET”. learn.microsoft.com. 2022年2月23日閲覧。
  9. ^ HongGit. “データ コントラクトの使用 - WCF”. learn.microsoft.com. 2022年2月23日閲覧。
  10. ^ PHP: オブジェクトのシリアライズ - Manual”. PHP Group. 2020年8月27日閲覧。

関連項目


直列化

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2022/02/23 18:49 UTC 版)

シリアライズ」の記事における「直列化」の解説

第二の意味の直列化(ちょくれつか)は、主にオブジェクト指向プログラミングにおいて使われる用語である。集合型や階層型構造を持つ複雑なデータオブジェクトは、配列連結リスト、ツリーマップなどのネットワークグラフ構造となるが、メモリ上で連続しているとは限らない。ある環境において存在しているオブジェクトを、連続するシリアルな)バイナリデータテキストデータ文字列)に変換することを直列化という。より具体的には、そのオブジェクトの状態を表す変数フィールド)の集合と、場合によってはオブジェクトの種類(型、クラス)を表すなんらかの識別子を、バイナリテキスト変換する。これにより、オブジェクトの表すデータを、ファイルとして保存したり、ネットワーク経由送信したりすることができるようになるこのようにして得られバイナリテキストは、デシリアライズによって、元のオブジェクト復元されるテキストとしてシリアライズする際のフォーマットとしては、数あるテキストファイル形式中でも規格として標準化されていて、階層構造表現サポートし、デシリアライズが比較容易なXMLJSONなどがよく使われる。テキストエンコーディングの文字集合には古くから様々な形式存在するが、Unicode普及してからはUTF-8使われることが多い。UTF-8では、ASCII範囲内であれば文字1バイト以内(7ビット)で表現できることから、ASCII文字占め割合が多いデータ場合シリアライズ後のデータ容量節約できるまた、バイト単位エンコーディングであり、エンディアン影響受けないというメリットもある。非ASCII文字マルチバイト文字として表現する必要があるが、日本語のようなマルチバイト文字占め割合が多いデータ場合は、UTF-8よりもUTF-16のほうがデータ容量節約できることもある。数値データが多い場合は、バイナリ形式利用するとさらに容量節約できるが、もとのオブジェクト拡張した場合でも互換性維持するためには、テキスト形式比べてフォーマット設計難易度上がる。なお、浮動小数点数10進数表記文字列としてシリアライズすると丸め誤差発生し、デシリアライズの際に情報正確に復元できないことがある。 また、メモリ上のオブジェクトを直列化してストレージ上のファイルなどの永続記憶保存することを永続化という。

※この「直列化」の解説は、「シリアライズ」の解説の一部です。
「直列化」を含む「シリアライズ」の記事については、「シリアライズ」の概要を参照ください。

ウィキペディア小見出し辞書の「直列化」の項目はプログラムで機械的に意味や本文を生成しているため、不適切な項目が含まれていることもあります。ご了承くださいませ。 お問い合わせ


英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「直列化」の関連用語

直列化のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



直列化のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのシリアライズ (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。
ウィキペディアウィキペディア
Text is available under GNU Free Documentation License (GFDL).
Weblio辞書に掲載されている「ウィキペディア小見出し辞書」の記事は、Wikipediaのシリアライズ (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。

©2025 GRAS Group, Inc.RSS