IP Force 特許公報掲載プロジェクト 2022.1.31 β版

知財求人 - 知財ポータルサイト「IP Force」

▶ 株式会社ソフトギアの特許一覧

特開2022-171464シリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システム
<>
  • 特開-シリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システム 図1
  • 特開-シリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システム 図2
  • 特開-シリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システム 図3A
  • 特開-シリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システム 図3B
  • 特開-シリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システム 図4
  • 特開-シリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システム 図5
  • 特開-シリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システム 図6
  • 特開-シリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システム 図7
  • 特開-シリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システム 図8
  • 特開-シリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システム 図9
  • 特開-シリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システム 図10
  • 特開-シリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システム 図11
  • 特開-シリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システム 図12
  • 特開-シリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システム 図13
  • 特開-シリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システム 図14
  • 特開-シリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システム 図15
< >
(19)【発行国】日本国特許庁(JP)
(12)【公報種別】公開特許公報(A)
(11)【公開番号】P2022171464
(43)【公開日】2022-11-11
(54)【発明の名称】シリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システム
(51)【国際特許分類】
   G06F 13/00 20060101AFI20221104BHJP
【FI】
G06F13/00 520B
【審査請求】有
【請求項の数】11
【出願形態】OL
(21)【出願番号】P 2021078133
(22)【出願日】2021-04-30
(71)【出願人】
【識別番号】308020799
【氏名又は名称】株式会社ソフトギア
(74)【代理人】
【識別番号】100180758
【弁理士】
【氏名又は名称】荒木 利之
(72)【発明者】
【氏名】宮永 直樹
【テーマコード(参考)】
5B084
【Fターム(参考)】
5B084AA02
5B084AA11
5B084BB11
5B084CB02
5B084DC02
(57)【要約】      (修正有)
【課題】通信の条件に柔軟に対応するとともに、通信データサイズを縮小するシリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システムを提供する。
【解決手段】サーバ装置1は、オブジェクトのクラスに関連付けられた情報を記載し、フィールド名を予め定めた順番に従って並べ替えて、当該フィールド名に対応するフィールド値を並べ替えた順に記載して、シリアル化されたデータとして出力するシリアル化手段103と、シリアル化されたオブジェクトのデータからクラスに関連付けられた情報を取得し、クラスのフィールド情報を取得し、シリアル化されたオブジェクトのデータのフィールド値に対応する値が、取得したフィールド名を予め定めた順番で並べ替えたものに対応して並んでいるものとして取得して、取得したフィールド名とともに復元して、復元されたオブジェクトとして出力する逆シリアル化手段101とを有する。
【選択図】図2
【特許請求の範囲】
【請求項1】
オブジェクトのクラスに関連付けられた情報を記載するステップと、
前記オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名に対応するフィールド値を並べ替えた順に記載するステップと、
前記記載されたクラスに関連付けられた情報と、前記並べ替えられたフィールド値をシリアル化されたデータとして出力するステップとを有するシリアル化方法。
【請求項2】
前記オブジェクトがサブクラスのインスタンスの場合、前記サブクラスが定義するフィールド名に加えてスーパークラスが定義するフィールド名を合わせて予め定めた順番に従って並べ替える請求項1に記載のシリアル化方法。
【請求項3】
前記フィールド値を並べ替えた順に記載するステップは、前記オブジェクトのフィールドの値を配列として記載する旨が定義されている場合は、前記オブジェクトのフィールドの値を、前記並べ替えた順序に従って前記配列として記載する請求項1又は2に記載のシリアル化方法。
【請求項4】
前記クラスに関連付けられた情報は、少なくとも前記オブジェクトのクラス名を予め定めた関数で変換したハッシュ値である請求項1から3のいずれか1項に記載のシリアル化方法。
【請求項5】
シリアル化されたオブジェクトのデータからクラスに関連付けられた情報を取得するステップと、
前記クラスのフィールド情報を取得するステップと、
前記シリアル化されたオブジェクトのデータのフィールド値に対応する値が、前記取得したフィールド名を予め定めた順番で並べ替えたものに対応して並んでいるものとして取得して、前記取得したフィールド名とともに復元するステップと、
前記取得されたクラスに関連付けられた情報、前記フィールド情報、前記フィールド値を復元されたオブジェクトとして出力するステップとを有する逆シリアル化方法。
【請求項6】
前記復元するステップは、前記オブジェクトのフィールド値が配列として記載されている場合、前記シリアル化されたオブジェクトのデータのフィールド値に対応する値が、前記取得したフィールド名を予め定めた順番で並べ替えて前記配列として記載されているものとして取得して、前記取得したフィールド名とともに復元する請求項5に記載の逆シリアル化方法。
【請求項7】
コンピュータを、
オブジェクトのクラスに関連付けられた情報を記載し、前記オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名に対応するフィールド値を並べ替えた順に記載し、前記記載されたクラスに関連付けられた情報と、前記並べ替えられたフィールド値をシリアル化されたデータとして出力するシリアル化手段として機能させる情報処理プログラム。
【請求項8】
コンピュータを、
シリアル化されたオブジェクトのデータからクラスに関連付けられた情報を取得し、前記クラスのフィールド情報を取得し、前記シリアル化されたオブジェクトのデータのフィールド値に対応する値が、前記取得したフィールド名を予め定めた順番で並べ替えたものに対応して並んでいるものとして取得して、前記取得したフィールド名とともに復元し、前記取得されたクラスに関連付けられた情報、前記フィールド情報、前記フィールド値を復元されたオブジェクトとして出力する逆シリアル化手段として機能させる情報処理プログラム。
【請求項9】
オブジェクトのクラスに関連付けられた情報を記載し、前記オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名に対応するフィールド値を並べ替えた順に記載し、前記記載されたクラスに関連付けられた情報と、前記並べ替えられたフィールド値をシリアル化されたデータとして出力するシリアル化手段を有する情報処理装置。
【請求項10】
シリアル化されたオブジェクトのデータからクラスに関連付けられた情報を取得し、前記クラスのフィールド情報を取得し、前記シリアル化されたオブジェクトのデータのフィールド値に対応する値が、前記取得したフィールド名を予め定めた順番で並べ替えたものに対応して並んでいるものとして取得して、前記取得したフィールド名とともに復元し、前記取得されたクラスに関連付けられた情報、前記フィールド情報、前記フィールド値を復元されたオブジェクトとして出力する逆シリアル化手段を有する情報処理装置。
【請求項11】
請求項9及び請求項10に記載の情報処理装置を複数通信可能に接続して構成される通信システム。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、シリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システムに関する。
【背景技術】
【0002】
従来の技術として、オブジェクトをシリアル化する際の通信データサイズを縮小する情報処理装置が提案されている(例えば、特許文献1参照)。
【0003】
特許文献1に開示された情報処理装置は、データオブジェクトをシリアル化する際に全てのデータを直列に並べず、複数のデータに区切り、必ずしも送る必要のないデータの区分は省略して並べて通信データを作成する。複数区分毎に、省略の有無を示す省略フラグビットを付加して通信データを送信し、受信側装置では当該省略フラグビットに基づいて受信した通信データを正しく復元する。
【先行技術文献】
【特許文献】
【0004】
【特許文献1】特開2008‐203959号公報
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかし、特許文献1の情報処理装置は、通信データの一部を省略してデータサイズを縮小することで通信時間の短縮を実現するものの、送っているのは省略フラグビットのみであり、例えば、シリアル化の対象となるオブジェクトの種類及びオブジェクト内のデータの並び順序等の情報については送っていない。つまり、これらの情報を順序送信側と受信側で予め共有していることが前提となるものであり、特許文献1の情報処理装置は、オブジェクトの種類に依存しない通信に対応するものではない、という問題がある。また、データの送信順が一定であるため、例えば、継承等を伴うオブジェクトや異なる言語間での通信、異なるコンパイラバージョン間での通信に対応するものではない、という問題がある。
【0006】
従って本発明の目的は、通信の条件に柔軟に対応するとともに、通信データサイズを縮小するシリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システムを提供することにある。
【課題を解決するための手段】
【0007】
本発明の一態様は、上記目的を達成するため、以下のシリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システムを提供する。
【0008】
[1]オブジェクトのクラスに関連付けられた情報を記載するステップと、
前記オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名に対応するフィールド値を並べ替えた順に記載するステップと、
前記記載されたクラスに関連付けられた情報と、前記並べ替えられたフィールド値をシリアル化されたデータとして出力するステップとを有するシリアル化方法。
[2]前記オブジェクトがサブクラスのインスタンスの場合、前記サブクラスが定義するフィールド名に加えてスーパークラスが定義するフィールド名を合わせて予め定めた順番に従って並べ替える前記[1]に記載のシリアル化方法。
[3]前記フィールド値を並べ替えた順に記載するステップは、前記オブジェクトのフィールドの値を配列として記載する旨が定義されている場合は、前記オブジェクトのフィールドの値を、前記並べ替えた順序に従って前記配列として記載する前記[1]又は[2]に記載のシリアル化方法。
[4]前記クラスに関連付けられた情報は、少なくとも前記オブジェクトのクラス名を予め定めた関数で変換したハッシュ値である前記[1]から[3]のいずれかに記載のシリアル化方法。
[5]シリアル化されたオブジェクトのデータからクラスに関連付けられた情報を取得するステップと、
前記クラスのフィールド情報を取得するステップと、
前記シリアル化されたオブジェクトのデータのフィールド値に対応する値が、前記取得したフィールド名を予め定めた順番で並べ替えたものに対応して並んでいるものとして取得して、前記取得したフィールド名とともに復元するステップと、
前記取得されたクラスに関連付けられた情報、前記フィールド情報、前記フィールド値を復元されたオブジェクトとして出力するステップとを有する逆シリアル化方法。
[6]前記復元するステップは、前記オブジェクトのフィールド値が配列として記載されている場合、前記シリアル化されたオブジェクトのデータのフィールド値に対応する値が、前記取得したフィールド名を予め定めた順番で並べ替えて前記配列として記載されているものとして取得して、前記取得したフィールド名とともに復元する前記[5]に記載の逆シリアル化方法。
[7]コンピュータを、
オブジェクトのクラスに関連付けられた情報を記載し、前記オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名に対応するフィールド値を並べ替えた順に記載し、前記記載されたクラスに関連付けられた情報と、前記並べ替えられたフィールド値をシリアル化されたデータとして出力するシリアル化手段として機能させる情報処理プログラム。
[8]コンピュータを、
シリアル化されたオブジェクトのデータからクラスに関連付けられた情報を取得し、前記クラスのフィールド情報を取得し、前記シリアル化されたオブジェクトのデータのフィールド値に対応する値が、前記取得したフィールド名を予め定めた順番で並べ替えたものに対応して並んでいるものとして取得して、前記取得したフィールド名とともに復元し、前記取得されたクラスに関連付けられた情報、前記フィールド情報、前記フィールド値を復元されたオブジェクトとして出力する逆シリアル化手段として機能させる情報処理プログラム。
[9]オブジェクトのクラスに関連付けられた情報を記載し、前記オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名に対応するフィールド値を並べ替えた順に記載し、前記記載されたクラスに関連付けられた情報と、前記並べ替えられたフィールド値をシリアル化されたデータとして出力するシリアル化手段を有する情報処理装置。
[10]シリアル化されたオブジェクトのデータからクラスに関連付けられた情報を取得し、前記クラスのフィールド情報を取得し、前記シリアル化されたオブジェクトのデータのフィールド値に対応する値が、前記取得したフィールド名を予め定めた順番で並べ替えたものに対応して並んでいるものとして取得して、前記取得したフィールド名とともに復元し、前記取得されたクラスに関連付けられた情報、前記フィールド情報、前記フィールド値を復元されたオブジェクトとして出力する逆シリアル化手段を有する情報処理装置。
[11]前記[9]及び[10]に記載の情報処理装置を複数通信可能に接続して構成される通信システム。
【発明の効果】
【0009】
請求項1、5、8、9、10、11に係る発明によれば、通信の条件に柔軟に対応するとともに、通信データサイズを縮小することができる。
請求項2、6に係る発明によれば、オブジェクトがサブクラスのインスタンスである場合であっても、通信の条件に柔軟に対応するとともに、通信データサイズを縮小することができる。
請求項3、7に係る発明によれば、オブジェクトのフィールドの値に配列が定められている場合であっても、通信の条件に柔軟に対応するとともに、通信データサイズを縮小することができる。
請求項4に係る発明によれば、クラスに関連付けられた情報は、少なくともオブジェクトのクラス名を予め定めた関数で変換したハッシュ値とすることができる。
【図面の簡単な説明】
【0010】
図1図1は、実施の形態に係る通信システムの構成の一例を示す概略図である。
図2図2は、実施の形態に係るサーバ装置の構成例を示すブロック図である。
図3A図3Aは、項目対応表の構成を示す図である。
図3B図3Bは、項目対応表の構成を示す図である。
図4図4は、シリアル化動作の一例を示すフローチャートである。
図5図5は、シリアル化動作の他の例を示すフローチャートである。
図6図6は、シリアル化動作の他の例を示すフローチャートである。
図7図7は、逆シリアル化動作の一例を示すフローチャートである。
図8図8は、逆シリアル化動作の他の例を示すフローチャートである。
図9図9は、シリアル化動作の一例を示すフローチャートである。
図10図10は、クラスの構成の具体的例を示す図であり、図10(a)が「Employee」クラス、図10(b)が「Manager」クラス、図10(c)が「Project」クラスである。
図11図11(a)~(c)は、インスタンスをシリアル化したデータの構成の一例を示す図である。
図12図12は、クラスの構成の具体的例を示す図であり、図12(a)が「Employee」クラス、図12(b)が「Manager」クラス、図12(c)が「Project」クラスである。
図13図13(a)~(c)は、インスタンスをシリアル化したデータの構成の一例を示す図である。
図14図14は、クラスの構成の具体的例を示す図であり、図14(a)が「Employee」クラス、図14(b)が「Manager」クラス、図14(c)が「Project」クラスである。
図15図15(a)~(c)は、インスタンスをシリアル化したデータの構成の一例を示す図である。
【発明を実施するための形態】
【0011】
[実施の形態]
(通信システムの構成)
図1は、実施の形態に係る通信システムの構成の一例を示す概略図である。
【0012】
この通信システムは、情報処理装置としてのサーバ装置1と、端末装置2a、2bとをネットワークによって互いに通信可能に接続することで構成される。
【0013】
サーバ装置1は、サーバ型の情報処理装置であり、操作者の操作する端末装置2a、2bの要求に応じて動作するものであって、本体内に情報を処理するための機能を有するCPU(Central Processing Unit)やHDD(Hard Disk Drive)又はフラッシュメモリ、揮発性メモリ、LANボード(無線/有線)等の電子部品を備える。サーバ装置1は、端末装置2a、2bと通信し、データの送受信を行うことで端末装置2a、2b上で動作するデータの同期を行うものであって、例えば、ゲームサーバ等である。なお、サーバ装置1は、複数のクラスターによって構成してもよく、分散処理を実行するよう構成してもよい。
【0014】
端末装置2a、2bは、端末型の情報処理装置であり、プログラムに基づいて動作するものであって、本体内に情報を処理するための機能を有するCPUやHDD又はフラッシュメモリ等の電子部品を備える。端末装置2a、2bは、例えば、MMOG(Massively Multiplayer Online Game)等のプログラムに基づいて動作し、動作の結果としてデータをサーバ装置1に対して逐次出力するとともに、サーバ装置1から他の端末の動作の結果としてのデータを受信して各端末2a、2b間で高頻度にゲームオブジェクトを同期するものである。なお、端末装置2は2つの装置で描かれているが単一の装置であってもよいし、3以上の装置で構成してもよい。
【0015】
ネットワーク4は、高速通信が可能な通信ネットワークであり、例えば、イントラネットやLAN(Local Area Network)等の有線又は無線の通信網である。
【0016】
一例として、サーバ装置1及び端末装置2a、2bは、各装置内でオブジェクトとして保持していた情報を、各装置間でデータを送信する際にシリアル化し、受信する際に逆シリアル化する。また、各装置内でオブジェクトとして保持していた情報を、HDD等の記憶部に記録する際にシリアル化し、読み出す際に逆シリアル化する。シリアル化及び逆シリアル化の詳細について、以降、実施の形態において具体的に説明する。
【0017】
また、本実施の形態において使用する「オブジェクト」、「クラス」、「フィールド」、「インスタンス」、「型」等の語句は、例えば、Java(登録商標)、C++、C#、Python、JavaScript(登録商標)、Ruby等で用いられる同語句と同義で用いられるが、以降、クラス、及びインスタンス化されたクラス(インスタンス)のことを総称して「オブジェクト」と言う場合がある。また、説明では、例としてJava言語の関数名やコード例を示すが、他のオブジェクト指向言語でも対応する同様の機能を有する。「クラス」は、プログラムを実行するための処理をまとめたものであり、クラス中には処理を実行するメソッド、メソッドが処理を実行する際に用いる変数としてフィールドが含まれる。オブジェクトは0個以降のフィールドを有し、各フィールドは、単数又は複数のフィールド名、フィールド値を有する。「型」は、数値、文字列、論理値、null、undefined、オブジェクト型を含み、「タイプ」と言う場合がある。クラスは、内部にさらにクラスを含む場合があり、他のクラスを継承する場合がある。また、フィールド値は、原則としてある値を有するが、処理段階まで定まらない変数である場合もある。また、「Primitive Type」は、オブジェクト型ではない、すなわち、フィールドやメソッドを持たない値のみの型であり、「Primitive Value」は、その値のことを言う。
【0018】
また、「シリアル化」のことを「シリアライゼーション」、「直列化」と言う場合があり、「シリアル化」することを「シリアライズ」と言う場合がある。同様に、「逆シリアル化」のことを「デシリアライゼーション」、「逆直列化」、「直列化復元」と言う場合があり、「逆シリアル化」することを「デシリアライズ」と言う場合がある。
【0019】
(サーバ装置の構成)
図2は、実施の形態に係るサーバ装置1の構成例を示すブロック図である。
【0020】
サーバ装置1は、CPU(Central Processing Unit)等から構成され、各部を制御するとともに、各種のプログラムを実行する制御部10と、フラッシュメモリ等の記憶媒体から構成され情報を記憶する記憶部11と、一時的に情報を記憶するメモリ12と、ネットワークを介して外部と通信する通信部13とを備える。
【0021】
制御部10は、後述する情報処理プログラムとしての情報処理プログラム110を実行することで、データ受信手段100、逆シリアル化手段101、オブジェクト処理手段102、シリアル化手段103及びデータ送信手段104等として機能する。
【0022】
データ受信手段100は、通信部13を介して端末装置2a、2bからシリアル化されたデータを受信する。
【0023】
逆シリアル化手段101は、データ受信手段100が受信したデータを逆シリアル化(デシリアライズ)してオブジェクト120、121…としてメモリ12に書き込む。逆シリアル化の詳細は後述する。
【0024】
オブジェクト処理手段102は、オブジェクト120、121…について必要な処理を実行する。
【0025】
シリアル化手段103は、メモリ12のオブジェクト120、121…(又はオブジェクト120、121…が加工されたオブジェクト)をシリアル化(シリアライズ)する。また、シリアル化手段103は、オブジェクト120、121…をシリアル化して記録データ111として保存する場合がある。シリアル化の詳細は後述する。
【0026】
データ送信手段104は、シリアル化手段103がシリアル化したデータを、通信部14を介して端末装置2b、2aに送信する。
【0027】
記憶部11は、制御部10を上述した各手段100‐104として動作させる情報処理プログラム110、記録データ111、項目対応表112等を記憶する。
【0028】
メモリ12は、オブジェクト120、121…及びその他の情報を一時的に記憶する。
【0029】
なお、端末装置2a、2bは、サーバ装置1と同様の構成に加え、操作部及び表示部を備える。サーバ装置1と構成が共通する部分については説明を省略する。
【0030】
図3A及び図3Bは、項目対応表112の構成を示す図である。
【0031】
項目対応表112(項目対応表112A及び112Bを合わせて112と呼ぶ。)は、基本型の項目対応表112A、拡張型及びユーザ定義型の項目対応表112Bから構成される、オブジェクトにおいて取り扱うデータの型を定義する表の一例であり、Message Pack(https://msgpack.org/)のコーディング(https://github.com/msgpack/msgpack/blob/master/spec.md)を一部採用している。本実施例ではMessagePackのコーディングを一部利用し、MessagePackを拡張してインプリしたものを示す。MessagePackの仕様により、シリアル化によってコーディングされる個々の要素は原則としてMessagePackの仕様が定義するフォーマット識別子からはじまるブロックのデータとして記述される。MessagePackの仕様によれば、ブロック内に複数のブロックを入れ子状に記述することができる。項目対応表112AはMessagePackのフォーマットの定義、112Bは本発明が開示する手法を実現する一方法を示すために、MessagePackに対して独自の拡張を行ったフォーマットの定義である。
【0032】
項目対応表112は、フォーマット名を示すformat nameと、バイナリ(2進数表記)コーディングした場合、バイナリ表現でのデータブロックの最初の1バイト目の内容を示すfirst byte (in binary)と、HEX(16進数表記)でのデータブロックの最初の1バイト目の内容を示すfirst byte (in hex)と、データブロックの2バイト目以降に固定で追加されるバイト数を示す追加バイトと、データブロックで最初の1バイト目と(もしあれば)次の固定追加バイトに続く、可変バイト数の値又は範囲を示す可変バイトと、ブロック全体のフォーマット長の値又は範囲を示すフォーマット長と、特記事項を示すRemarksを有する。
【0033】
(情報処理装置の動作)
次に、本実施の形態の作用を、(1)基本動作、(2)シリアル化動作、(3)逆シリアル化動作に分けて説明する。
【0034】
(1)基本動作
端末装置2a、2bは、例えば、ネットワーク対戦型ゲームのプログラムを実行するものであり、プログラムの実行に伴い複数のオブジェクトを逐次処理する。サーバ装置1は、端末装置2a、2bにおいてプログラムが実行される際に処理されるオブジェクトの同期を行う。サーバ装置1及び端末装置2a、2bは、互いに変更が生じたオブジェクトを送信し、受信したオブジェクトで変更を反映することで同期を行う。
【0035】
サーバ装置1及び端末装置2a、2bは、各装置内でオブジェクトとして保持していた情報を、各装置間でデータを送信する際にシリアル化し、受信する際に逆シリアル化する。また、各装置内でオブジェクトとして保持していた情報を、HDD等の記憶部に記録する際にシリアル化し、読み出す際に逆シリアル化する。以下、サーバ装置1及び端末装置2a、2bのシリアル化動作及び逆シリアル化動作並びにこれに伴う動作について説明するが、いずれの装置においても動作内容が共通するため、代表してサーバ装置1の動作について説明する。
【0036】
データの同期において端末装置2a、2bからデータを受信する際に、サーバ装置1のデータ受信手段100は、通信部13を介して端末装置2a、2bからシリアル化されたデータを受信する。
【0037】
次に、サーバ装置1の逆シリアル化手段101は、データ受信手段100が受信したデータを逆シリアル化(デシリアライズ)してオブジェクト120、121…としてメモリ12に書き込むことで端末装置2a、2bとオブジェクトの内容を同期する。なお、逆シリアル化の詳細は「(3)逆シリアル化動作」において説明する。
【0038】
次に、サーバ装置1のオブジェクト処理手段102は、オブジェクト120、121…について必要な処理を実行する。
【0039】
次に、サーバ装置1のシリアル化手段103は、メモリ12のオブジェクト120、121…をシリアル化(シリアライズ)する。また、シリアル化手段103は、オブジェクト120、121…をシリアル化して記録データ111として保存する場合がある。シリアル化の詳細は「(2)シリアル化動作」において説明する。
【0040】
次に、サーバ装置1のデータ送信手段104は、シリアル化手段103がシリアル化したデータを、通信部14を介して端末装置2b、2aに送信する。
【0041】
(2)シリアル化動作
まず、サーバ装置1のシリアル化手段103は、基本のシリアル化手順として、まず、シリアル化の対象となるオブジェクトのクラスに関連付けられた情報を、シリアル化したデータとして記録して、これに続き、さらにフィールド名をアルファベット順に並び替えて、フィールド値のみを記録する(フィールド名を記録しない。)。なお、この情報の記録順、記録の動作順は、予め定めた規則に基づいていれば変更してもよい。具体的な記録順は図11図13図15に示す。
【0042】
なお、「クラスに関連付けられた情報」とは逆シリアル化する時にクラスを復元するのに必要なクラスの情報で、クラス名やクラスの型定義を含む。ジェネリッククラスのインスタンスの場合は、さらに、型パラメータのクラスに関連付けられた情報を含む。クラスの定義そのものをエンコーディングするのは現実的ではないので、クラス定義そのものはシリアル化と逆シリアル化側で同じものを持ち、完全なクラス名の文字列で表現することもできる。本実施形態では、シリアル化で使用するクラスについては(逆シリアル化においても同様に使用する。)、事前にクラスIDに対応付けられた情報を用意しておき、クラスとクラスIDを関連付ける。具体的な関連付けとして、一例として、ハッシュ関数を用い、クラス名の文字列(jp.co.soft‐gear.sample.Employee等)を計算して4バイトのハッシュ値を対応付けた情報を生成する。シリアル化では、完全なクラス名(クラス名のフルネーム、Employeeなどのショート名でなく、jp.co.soft‐gear.sample.Employeeなどのフルパス)が指定されると、事前登録した情報に基づいて4バイトの値に変換され、この値を用いて「クラスに関する情報」としてクラス名をシリアル化する。なお、ハッシュ値はクラス名から一意に決まるが、ハッシュ値からもクラス名が一意に決まるように、十分なデータ量を準備する必要がある。本実施レ形態では4バイト(UINT32)用意する。4バイト用意したことで42億通り以上のハッシュ値に分散され、異なるクラスが同一のハッシュ値を持つことは極めてまれであり、そのような状況を低減できる。汎用性を犠牲にして、アプリケーション独自の対応表(クラスとクラスIDの対応表)を作ることも可能である。その場合は、シリアル化の対象となるオブジェクトが256個以下であれば、わずか1バイトでクラスに対応する情報を表現することができる。次に、オブジェクトの種類によるシリアル化動作の例を説明する。
【0043】
図4は、シリアル化動作の一例を示すフローチャートである。
【0044】
シリアル化手段103は、シリアル化の対象となるオブジェクトの内容を確認するが、まず、オブジェクトの型が標準かつ明確か確認し(S10)、標準かつ明確である場合(S10;Yes)、Collectionオブジェクトであるか確認する(S11)。なお、ここで「標準」とは、図3Aの項目対応表112Aに属する型を指す。また、「明確」とは、インスタンス化により不変で固定された型を指す。例えば、ジェネリック型オブジェクトのインスタンスにおいて、フィールドの型がインスタンス化時のパラメータとして指定されるパラメータ型でないことである。また別の例では、フィールドの値の型がフィールドの定義型と一致していて、サブクラスでない場合である。言い換えれば、Primitive型かCollection型のいずれかである。
【0045】
次に、シリアル化手段103は、シリアル化の対象となるオブジェクトがCollectionオブジェクトである場合(S11;Yes)、配列(Array又はMap)の各要素の型と要素数を記録し、それぞれの要素について値のシリアル化手順を実行する(S12)。
【0046】
また、シリアル化手段103は、シリアル化の対象となるオブジェクトがCollectionオブジェクトでない場合(S11;No)、Primitive valueであるか確認して(S13)、Primitive valueである場合は(S13;Yes)、型と値を記録する(S14)。
【0047】
また、シリアル化手段103は、シリアル化の対象となるオブジェクトの型が標準かつ明確でない場合(S10;No)、拡張定義型のクラスのインスタンスか確認し(S15)、拡張定義型のクラスのインスタンスである場合(S15;Yes)、拡張定義型の型を記録し、値についてシリアル化を実行し、Primitive valueとして記録する(S16)。なお、逆シリアル化を行うプログラムの言語の関係によっては、逆シリアル化でオブジェクトを復元する際に、タイプパラメータの情報が不要な場合もある。その場合は、拡張定義型の型情報を省略して、通常のPrimitive valueとして記録してもよい。シリアル化データとして記載するのに必要なバイト数を節約できる。例えば、プログラム言語間の仕様の差が小さく型キャストによる代入でフィールドが復元できる場合である。
【0048】
また、シリアル化手段103は、シリアル化の対象となるオブジェクトが拡張定義型のクラスのインスタンスでない場合(S15;No)、ユーザ定義型のクラスのインスタンスか確認し(S17)、ユーザ定義型のクラスのインスタンスである場合(S17;Yes)、クラスIDを記録し、シリアル化手順を実行して、フィールド名をアルファベット順に並び替えてフィールド値のみをArrayとして記録する(S18)。
【0049】
また、シリアル化手段103は、シリアル化の対象となるオブジェクトがユーザ定義型のクラスのインスタンスでない場合(S17;No)、ユーザ定義型のGenericsクラスのインスタンスか確認し(S19)、ユーザ定義型のGenericsクラスのインスタンスである場合(S19;Yes)、クラスID(Generics)を記録し、Genericsのタイプパラメータ(型パラメータ)で指定されたクラス1以上についてシリアル化手順を実行し、クラスIDのArray(Collection)として記録するとともに、フィールドについてシリアル化手順を実行して、フィールド名をアルファベット順に並び替えてフィールド値のみをArray(Collection)として記録する(S18)。
【0050】
また、シリアル化手段103は、シリアル化の対象となるオブジェクトがユーザ定義型のGenericsクラスのインスタンスでない場合(S19;No)、エラーを返す。
【0051】
上記ステップS17~S20のシリアル化の対象となるオブジェクトがユーザ定義型のクラスである場合について、シリアル化の具体的な動作手順について以下説明する。
【0052】
図5は、シリアル化動作の他の例を示すフローチャートである。
【0053】
シリアル化手段103は、対象のオブジェクトがGenericクラスのインスタンスか確認し(S30)、Genericクラスのインスタンスである場合(S30;Yes)、まず、1つ目の要素について、MessagePackのFIXEXT4として以下のように記述する。まず、FIXEXT4の識別子として(0xD6)、続いてTYPE(1バイト)として0x15(Generics)、最後にDATA(4バイト)として、当該インスタンスのクラス情報として登録済の4バイトのID(ハッシュ値UINT32)、をそれぞれコードとして書き出す(S31)。
【0054】
次に、2つ目の要素について、Genericクラスのタイプパラメータとして使われている1個以上のクラスの情報をUint32のArrayとして書き出す(S32)。なお、クラス情報は、ユーザ定義型オブジェクトの場合は、予め登録済のハッシュ値、それ以外の場合は予め定義している拡張型のコードを使用する。なお、ジェネリックオブジェクトの種類とシリアル化と逆シリアル化を行うプログラムの言語の関係によっては、逆シリアル化でオブジェクトを復元する際に、タイプパラメータの情報が不要な場合もある。その場合は、タイプパラメータの情報を添付せずに、通常のオブジェクトとしてシリアル化してもよい。シリアル化データとして記載するのに必要なバイト数を節約できる。例えば、タイプパラメータがメソッドの定義のみに使われ、フィールドの定義に使われてない場合である。別の例では、プログラム言語間の仕様の差が小さく型キャストによる代入でフィールドが復元できる場合である。
【0055】
また、シリアル化手段103は、対象のオブジェクトがGenericクラスのインスタンスでない場合(S30;No)、1つ目の要素について、まずFIXEXT4の識別子として(0xD6)、続いてTYPE(1バイト)として0x0F(Object)、最後にDATA(4バイト)として、このインスタンスのクラス情報として登録済の4バイトのID(ハッシュ値UINT32)、をそれぞれコードとして書き出す(S34)。
【0056】
次に、最後の要素(Genericsクラスのインスタンスの場合は3つ目の要素、それ以外の通常のクラスのインスタンスの場合は2つ目の要素)について、図6に示すフローチャートに従い、フィールド情報をコードとして書き出す(S33)。
【0057】
図6は、シリアル化動作の他の例を示すフローチャートである。
【0058】
図5のフローチャートのステップS33において、シリアル化手段103は、まず、リフレクションを行い、クラスに定義されているフィールド名を継承分も含めて取得し、フィールド名のリストAを作成する(getDeclaredField())(S70)。なお、getDeclaredFieldは、自身のクラスと継承している上位のクラスの分(階層が深ければ階層分だけ)実行する。
【0059】
また、フィールド名のリストAから、シリアル化対象外のフィールドを除外したリストBを作成する(S71)。ここで、getModifiersでフィールドのModifierを検査する。なお、シリアライゼーションの対象としないフィールド、具体的には、StaticやTransientを除く。
【0060】
次に、フィールド名のリストBをアルファベット順(あるいは、シリアル化・シリアル化復元間で共通のソートアルゴリズム)でソートしたリストCを作成する(S72)。
【0061】
次に、リストCの要素数個数分だけのarrayを出力するという内容のコードを書き出す(S73)。例えば、要素数0ならarray[0]というコード、要素数3ならarray[3]というコードを書き出す(当該動作は、MessagePackの仕様に準拠している。)。
【0062】
次に、シリアル化手段103は、リストCが空か確認し(S74)、空でなければ(S74;No)、リストCからフィールド名を1つ取り出し(S75)、取り出したフィールド名の値をシリアル化し、コードを書き出す(S76)。なお、Primitive Valueになるまで再帰的にシリアル化を繰り返す(図4のS10~S20を繰り返す。)。
【0063】
次に、シリアル化手段103は、リストCが空となったら(S74;Yes)、処理を終了する。
【0064】
以下、シリアル化したインスタンスの具体例を説明する。
【0065】
図10は、クラスの構成の具体的例を示す図であり、(a)が「Employee」クラス、(b)が「Manager」クラス、(c)が「Project」クラスであって、図12図14においてそれぞれ異なる定義を有する場合について説明する。図11図13図15は、図10図12図14のクラスをインスタンス化した後、シリアル化した例である。なお、インスタンス化は、それぞれ、以下の表1A、表1B、および、表1Cに基づいて行う。
【0066】
【表1A】
【0067】
【表1B】
【0068】
【表1C】
【0069】
図11(a)~(c)は、インスタンスをシリアル化したデータの構成の一例を示す図であって、図11(a)はEmployeeクラスについて太郎のインスタンスを、図11(b)はManagerクラスについて花子のインスタンスを、図11(c)はProjectクラスについてProject Xのインスタンスを、それぞれシリアル化したデータの例である。
【0070】
図11(a)に示すように、フィールド値に単純な値のみを有する基本的なオブジェクトを対象とする場合、データ120i11は、フォーマット識別子「FixExt4」、クラス名「Object“Employee”」に関連付けられたクラスIDのハッシュ値を含めてコーディングされる(コーディング結果は最上段参照。)。また、フィールド名がクラスで定義された順番「serialCode」、「deptCode」の順ではなく、フィールド名をアルファベット順「deptCode」、「serialCode」でソートしてから、フィールドの値「301」、「1」のみがフィールド個数だけ(NULLでもNULLとして)バイナリコーディングされる。
【0071】
また、図11(b)に示すように、継承クラスのオブジェクトを対象とし、また、フィールドに他の「Employee」オブジェクトを含むオブジェクトである場合を示す。データ120i12は、型「FixExt4」、クラス名「Object“Maneger”」に関連付けられたクラスIDのハッシュ値を含めてコーディングされ、フィールドについては、フィールド「reports」だけでなく、継承しているフィールド「serialCode」、「deptCode」を含めてソートされる。また、フィールド「reports」は、管理対象社員太郎(最上段の欄外の斜体文字の数字13バイト目から23バイト目)と次郎(24バイト目から33バイト目)の二人の「Employee」オブジェクトを2要素のアレイ(Array[2])(Array識別子は12バイト目、Array全体としては12バイト目から23バイト目)として含む。
【0072】
また、図11(c)に示すように、ジェネリックスオブジェクト「Project」のインスタンス「Project X」はデータ120i13にシリアル化される。図10に示すクラス「Project」の定義によれば、フィールド「members」には、パラメータXで指定されたクラス「Employee」を継承するオブジェクトのリストが記述される。ProjectXが花子、太郎、武蔵から構成される場合は、クラス「Employee」のサブクラス「Manager」のインスタンス花子(15バイト目から48バイト目))と、クラス「Employee」のインスタンス太郎(49バイト目から59バイト目)と武蔵(60バイト目から70バイト目)とを含む要素数3個のリスト(14バイト目から70バイト目)は要素数3のアレイArray[3](14バイト目から70バイト目)として、フィールド「members」が記述される。予約済フィールド「parameterClasses」を除いたフィールド「projectCode」と「members」はジェネリッククラス「Project」の通常フィールドであるため、フィールド名がアルファベット順に並び替えられて、フィールド「members」(14バイト目から70バイト目)、フィールド「projectCode」(71バイト目から73バイト目)の順で、要素数2個のアレイ(Array[2])(13バイト目から73バイト目)として記述される。また、「Project」はジェネリクスクラスであるので、予約済フィールド「parameterClasses」にタイプパラメータXの記述として、インスタンス「Project X」をインスタンス化するときに指定したクラス「Employee」に関連付けられた情報であるクラスIDのハッシュ値(8バイト目から12バイト目)が要素1個のアレイ(Array[1])(7バイト目から12バイト目)として記述される。
【0073】
また、図13(a)~(d)は、インスタンスをシリアル化したデータの構成の一例を示す図であって、図13(a)は「Employee」クラスについて太郎のインスタンスを、図13(b)は「Employee」クラスについて武蔵のインスタンスを、図13(c)はManagerクラスについて花子のインスタンスを、図13(d)は「Project」クラスについてProject Xのインスタンスを、それぞれシリアル化したデータの例である。なお、図13(b)武蔵のクラスObjectのフィールド「deptCode」は、String型の「K01」である。フィールドの値の型「String」がフィールドの型「Object」のサブクラスであり、型が一致していないので、逆シリアル化の時に正しくフィールドの値が正しく復元されるように拡張定義型を用いて型情報を詳細に記述する。
【0074】
なお、図13(a)~(d)は、図11(a)~(c)に示した例を拡張定義型で記載したものである(図11(a)~(c)に示した例に対して「武蔵」のインスタンス(図13(b))が増えている。)。具体的には、データ120i22の「D4」において型が「拡張String」となっている。また、逆シリアル化するときにフィールドのクラス型が明確になるように、項目対応表112の拡張クラスの型情報(図3(b))を参照して拡張String型(IDの値0x0D)がフォーマット識別子FixExt1(0xD4)に続いて記述(8バイト目から10バイト目)され、引き続き、文字列「K01」(11バイト目から14バイト目)が記述され、フィールド「deptCode」の値として記述(8バイト目から14バイト目)される。
【0075】
また、図15(a)~(d)は、インスタンスをシリアル化したデータの構成の一例を示す図であって、図15(a)は「Employee」クラスについて太郎のインスタンスを、図15(b)は「Employee」クラスについて武蔵のインスタンスを、図15(c)は「Manager」クラスについて花子のインスタンスを、図15(d)は「Project」クラスについてProject Xのインスタンスを、それぞれシリアル化したデータの例である。
【0076】
なお、図15(a)~(d)は、図13(a)~(d)に示した例とほぼ同等であるが、図15(d)のクラスでは、クラス「Project」にはフィールド「member」で記述するリストと区別して別フィード「leader」を記述できるようになっている。
【0077】
上記したように、シリアル化されたデータは、MessagePackの仕様を踏襲しており、ブロックに分解して解釈できるように構成されている。また、ブロックの中に入れ子状にさらにブロックが含まれることもある。ブロックの先頭にはフォーマット識別子が記載され、当該フォーマット識別子によりその後に続くブロックのサイズとデータの種類が示される。つまり、次に説明する「(3)逆シリアル化動作」において、フォーマット識別子に基づいて、受信したデータ列を頭から順に解釈して、構造化したデータに復元可能となる。
【0078】
(3)逆シリアル化動作
逆シリアル化手段101は、「(2)シリアル化動作」の逆の手順を踏むものであるが、基本の逆シリアル化手順として、まず、シリアル化されたデータからクラスに関連付けられた情報を取得し、当該情報からクラス名を特定してリフレクションによりフィールド情報(フィールドを復元するのに必要な情報であり、少なくともフィールド名及び型を含む。Genericsのタイプパラメータで指定された型や拡張データ型も含まれることもあり、その他にフィールドを復元するのに必要な情報を含んでいてもよい。)を取得する。次に、項目対応表112を参照しつつ、データからクラスの型情報を確認し、フィールド名をアルファベット順からクラスの定義順に並び替えて、フィールド値を復元する。以下に、ユーザ定義型の逆シリアル化動作について説明する。
【0079】
なお、逆シリアル化する時は、クラスに関連付けられた情報であるクラスIDのハッシュ値を受信すると、予め用意したクラスとクラスIDとを対応付けた情報を検索して、フルネームのクラス名とクラスの定義を取得し、クラス情報を復元する。
【0080】
図7は、逆シリアル化動作の一例を示すフローチャートである。
【0081】
逆シリアル化手段101は、シリアル化されたデータがCollectionオブジェクトをシリアル化したものであるか確認し(S50)、Collectionオブジェクトをシリアル化したものである場合(S50;Yes)、型と要素数を取得し、それぞれの要素に該当するブロックについて基本の逆シリアル化手順を適用してそれぞれの要素を取得する(S51)。
【0082】
次に、逆シリアル化手段101は、Collectionオブジェクトをシリアル化したものでない場合(S50;No)、Primitive型であるか確認して(S52)、Primitive型である場合は(S52;Yes)、型と値を取得する(S53)。
【0083】
次に、逆シリアル化手段101は、拡張定義型のクラスのインスタンスをシリアル化したものか確認し(S54)、拡張定義型のクラスのインスタンスをシリアル化したものである場合(S54;Yes)、拡張定義型の型を取得し、値について逆シリアル化手順を実行し、Primitive valueとして復元する(S55)。
【0084】
次に、逆シリアル化手段101は、拡張定義型のクラスのインスタンスをシリアル化したものでない場合(S54;No)、ユーザ定義型のクラスのインスタンスをシリアル化したものか確認し(S56)、ユーザ定義型のクラスのインスタンスをシリアル化したものである場合(S56;Yes)、クラスIDを取得し、登録済みのIDリストから対応するクラスを取得し、リフレクションを用いてクラスを特定する。特定したクラスのインスタンスを生成し、インスタンスのすべてのフィールドについて、フィールド名のアルファベット順に、取得した値を代入してオブジェクトを復元する(S57)。
【0085】
次に、逆シリアル化手段101は、ユーザ定義型のクラスのインスタンスをシリアル化したものでない場合(S56;No)、ユーザ定義型のGenericsクラスのインスタンスをシリアル化したものか確認し(S58)、ユーザ定義型のGenericsクラスのインスタンスをシリアル化したものである場合(S58;Yes)、クラスID(Generics)を取得し、Genericsのタイプパラメータとフィールドは、まず、後続の1個目と2個目の要素に対してそれぞれ逆シリアル化手順を実行して取得する(S59)。1個目の要素は拡張定義型のClass IDのArray(Collection)、Geneticsクラスに指定するタイプパラメータである拡張定義型 Class IDを1個以上取得する。取得したタイプパラメータに関連付けられた情報からタイプパラメータのクラス情報を取得し、タイプパラメータが指定されたフィールドの型の取得に用いる。2個目の要素は、フィールド値に対して逆シリアル化手順を実行してフィールド値のArrayとし、フィールド名についてアルファベット順に並び替えて、対応するフィールド値を代入して取得する。
【0086】
次に、逆シリアル化手段101は、ユーザ定義型のGenericsクラスのインスタンスをシリアル化したものでない場合(S58;No)、エラーを返す。
【0087】
上記ステップS56~S59の逆シリアル化の対象となるデータがユーザ定義型のクラスのオブジェクトをシリアル化したものである場合について、逆シリアル化の具体的な動作手順について以下説明する。
【0088】
図8は、逆シリアル化動作の他の例を示すフローチャートである。
【0089】
逆シリアル化手段101は、まず、データの型がFIXEXT4(0xD6)のブロックに属するものか確認する(S60)。データの型がFIXEXT4(0xD6)のブロックに属するものである場合(S60;Yes)、FIXEXT4(0xD6)のブロック(6バイト)を読み込み、フォーマット識別子「FIXEXT4」に予め定義されたTYPE(1バイト)とDATA(4バイト)を取得する。DATAより復元するインスタンスのクラスに関連付けられた値(クラスID)を取得する(S61)。
【0090】
次に、逆シリアル化手段101は、FIXEXT4のTYPEフィールドがGenerics(0x15)か確認する(S62)。TYPEがGenerics(0x15)である場合(S62;Yes)、次のArrayブロックを読み込み、タイプパラメータとして使われるクラスを1個以上取得する(S63)。なお、フィールドのシリアル化復元時にパラメータを持つクラスに、ここで取得したパラメータのクラスを適用する。
【0091】
次に、逆シリアル化手段101は、次のArrayブロックを読み込み、図9に示すフローチャートに従いフィールド情報からインスタンスのフィールド値を復元する(S64)。なお、Genericオブジェクトについて、フィールド宣言型にパラメータが使用されている場合は、パラメータを適用したクラスのインスタンスとして復元する。
【0092】
また、逆シリアル化手段101は、データの型がFIXEXT4(0xD6)のブロックに属するものでない場合(S60;No)、本手順の対象外であるため処理を終了する。
【0093】
また、逆シリアル化手段101は、TYPEがGenerics(0x15)でない場合(S62;No)、TYPEがObject(0x0F)であれば(S65;Yes)、ステップS64へと進み、TYPEがObject(0x0F)でなければ(S65;No)、エラーを返す。
【0094】
図9は、シリアル化動作の一例を示すフローチャートである。
【0095】
まず、逆シリアル化手段101は、クラスに定義されているフィールド名を取得し(継承が複数階層の場合は上位の階層のフィールド名まで取得し)、フィールド名のリストAを作成する(getDeclaredField())(S80)。
【0096】
次に、逆シリアル化手段101は、フィールド名のリストAから、シリアル化対象外のフィールドを除外したリストBを作成する(S81)。ここで、getModifiersでフィールドのModifierを検査する。なお、StaticやTransientを除く。
【0097】
次に、逆シリアル化手段101は、フィールド名のリストBをアルファベット順(あるいは、シリアル化・シリアル化復元間で共通ソートアルゴリズム)でソートしたリストCを作成する(S82)。
【0098】
次に、逆シリアル化手段101は、リストCの要素数と読み出したarrayコードで定義されている個数(フィールド個数)とが一致するか確認する(S83)。
【0099】
リストCの要素数と読み出したarrayコードで定義されている個数(フィールド個数)とが一致する場合(S83;Yes)、リストCが空か確認し(S84)、空でなければ(S84;No)、リストCからフィールド名を1つ取り出し(S85)、フィールド名のフィールドに読み込んだ要素1個を代入する(S86)。ここで、要素がPrimitive Valueとして取得されるまで再帰的にシリアル化復元を繰り返す。また、要素がFIXEXT1(D4)の場合は指定される拡張型の型として型を指定して復元する。また、Genericsの型パラメータが指定された場合は、パラメータを適用した型として代入する。
【0100】
次に、逆シリアル化手段101は、リストCが空となったら(S84;Yes)、処理を終了する。
【0101】
また、リストCの要素数と読み出したarrayコードで定義されている個数(フィールド個数)とが一致しない場合(S83;No)、エラーを返す。
【0102】
(実施の形態の効果)
上記した実施の形態によれば、シリアル化する際にクラスに関連付けられた情報を記録し、フィールド名を予め定めたルールで並び替えてフィールド値を記録し、フィールド名を省略してシリアル化したデータを生成し、逆シリアル化する際にリフレクションによりクラス名からフィールド名を取得して、フィールド値を元の順に並び替えて復元するようにしたため、シリアル化の対象となるオブジェクトの制限を低減することができる。また、フィールド名を記録する必要がないため、フィールド名を記録する場合に比べて、シリアル化したデータのサイズを小さくできる。
【0103】
また、フィールド名を予め定めたルールで並び替えて、フィールド名を省略したため、言語依存性がなくなるとともに、フィールド値に対してナンバリングする必要がないことから保守性及び開発効率が向上するとともに、フィールド名を自由に設定できる(フィールド名を長く設定したとしてもシリアル化した結果のデータが長くならない。)。また、シリアル化の際にフィールド名をアルファベット順(あらかじめ決められた順序)で並べ替えるようにし、逆シリアル化の際にリフレクション機能でフィールド情報(名前、タイプ)を取得して、シリアライズしたデータをフィールド名でアルファベット順にならべかえたフィールドに代入するようにしたため、シリアライズされたデータとフィールド名の対応をIDL(インターフェース定義言語)を参照する必要がなく、リフレクションを行うことでIDLが不要となる。これらを総じて通信の条件や環境に柔軟に対応することができる。
【0104】
[他の実施の形態]
なお、本発明は、上記実施の形態に限定されず、本発明の趣旨を逸脱しない範囲で種々な変形が可能である。
【0105】
上記実施の形態では制御部10の各手段100~104の機能をプログラムで実現したが、各手段の全て又は一部をASIC等のハードウエアによって実現してもよい。また、上記実施の形態で用いたプログラムをCD‐ROM等の記録媒体に記憶して提供することもできる。また、上記実施の形態で説明した上記ステップの入れ替え、削除、追加等は本発明の要旨を変更しない範囲内で可能である。
【符号の説明】
【0106】
1 :サーバ装置
2 :端末装置
10 :制御部
11 :記憶部
12 :メモリ
13 :通信部
100 :データ受信手段
101 :逆シリアル化手段
102 :オブジェクト処理手段
103 :シリアル化手段
104 :データ送信手段
110 :情報処理プログラム
111 :記録データ
112 :項目対応表
120 :オブジェクト
121 :オブジェクト
図1
図2
図3A
図3B
図4
図5
図6
図7
図8
図9
図10
図11
図12
図13
図14
図15
【手続補正書】
【提出日】2021-10-19
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
情報を処理するコンピュータにおいて、
オブジェクトのクラスに関連付けられた情報を記載するステップと、
前記オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を記載せずに、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載するステップと、
前記記載されたクラスに関連付けられた情報と、前記並べ替えられたフィールド値をシリアル化されたデータとして出力するステップとを有するシリアル化方法。
【請求項2】
前記オブジェクトがサブクラスのインスタンスの場合、前記サブクラスが定義するフィールド名に加えてスーパークラスが定義するフィールド名を合わせたフィールド名について前記サブクラス及び前記スーパークラスに関わらず予め定めた順番に従って並べ替える請求項1に記載のシリアル化方法。
【請求項3】
前記フィールド値を並べ替えた順に記載するステップは、前記オブジェクトのフィールドの値を配列として記載する旨が定義されている場合は、前記オブジェクトのフィールドの値を、前記並べ替えた順序に従って前記配列として記載する請求項1又は2に記載のシリアル化方法。
【請求項4】
前記クラスに関連付けられた情報は、少なくとも前記オブジェクトのクラス名を予め定めた関数で変換したハッシュ値である請求項1から3のいずれか1項に記載のシリアル化方法。
【請求項5】
情報を処理するコンピュータにおいて、
オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を記載せずに、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載して、当該オブジェクトのクラスに関連付けられた情報とともにシリアル化されたデータからクラスに関連付けられた情報を取得するステップと、
前記クラスのフィールド情報を取得するステップと、
前記シリアル化されたオブジェクトのデータのフィールド値に対応する値が、前記取得したフィールド名を予め定めた順番で並べ替えたものに対応して並んでいるものとして取得して、前記取得したフィールド名とともに復元するステップと、
前記取得されたクラスに関連付けられた情報、前記フィールド情報、前記フィールド値を復元されたオブジェクトとして出力するステップとを有する逆シリアル化方法。
【請求項6】
前記復元するステップは、前記オブジェクトのフィールド値が配列として記載されている場合、前記シリアル化されたオブジェクトのデータのフィールド値に対応する値が、前記取得したフィールド名を予め定めた順番で並べ替えて前記配列として記載されているものとして取得して、前記取得したフィールド名とともに復元する請求項5に記載の逆シリアル化方法。
【請求項7】
コンピュータを、
オブジェクトのクラスに関連付けられた情報を記載し、前記オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を記載せずに、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載し、前記記載されたクラスに関連付けられた情報と、前記並べ替えられたフィールド値をシリアル化されたデータとして出力するシリアル化手段として機能させる情報処理プログラム。
【請求項8】
コンピュータを、
オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を記載せずに、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載して、当該オブジェクトのクラスに関連付けられた情報とともにシリアル化されたデータからクラスに関連付けられた情報を取得し、前記クラスのフィールド情報を取得し、前記シリアル化されたオブジェクトのデータのフィールド値に対応する値が、前記取得したフィールド名を予め定めた順番で並べ替えたものに対応して並んでいるものとして取得して、前記取得したフィールド名とともに復元し、前記取得されたクラスに関連付けられた情報、前記フィールド情報、前記フィールド値を復元されたオブジェクトとして出力する逆シリアル化手段として機能させる情報処理プログラム。
【請求項9】
オブジェクトのクラスに関連付けられた情報を記載し、前記オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を記載せずに、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載し、前記記載されたクラスに関連付けられた情報と、前記並べ替えられたフィールド値をシリアル化されたデータとして出力するシリアル化手段を有する情報処理装置。
【請求項10】
オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を記載せずに、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載して、当該オブジェクトのクラスに関連付けられた情報とともにシリアル化されたデータからクラスに関連付けられた情報を取得し、前記クラスのフィールド情報を取得し、前記シリアル化されたオブジェクトのデータのフィールド値に対応する値が、前記取得したフィールド名を予め定めた順番で並べ替えたものに対応して並んでいるものとして取得して、前記取得したフィールド名とともに復元し、前記取得されたクラスに関連付けられた情報、前記フィールド情報、前記フィールド値を復元されたオブジェクトとして出力する逆シリアル化手段を有する情報処理装置。
【請求項11】
請求項9及び請求項10に記載の情報処理装置を複数通信可能に接続して構成される通信システム。
【手続補正2】
【補正対象書類名】明細書
【補正対象項目名】0008
【補正方法】変更
【補正の内容】
【0008】
[1]情報を処理するコンピュータにおいて、
オブジェクトのクラスに関連付けられた情報を記載するステップと、
前記オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を記載せずに、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載するステップと、
前記記載されたクラスに関連付けられた情報と、前記並べ替えられたフィールド値をシリアル化されたデータとして出力するステップとを有するシリアル化方法。
[2]前記オブジェクトがサブクラスのインスタンスの場合、前記サブクラスが定義するフィールド名に加えてスーパークラスが定義するフィールド名を合わせたフィールド名について前記サブクラス及び前記スーパークラスに関わらず予め定めた順番に従って並べ替える前記[1]に記載のシリアル化方法。
[3]前記フィールド値を並べ替えた順に記載するステップは、前記オブジェクトのフィールドの値を配列として記載する旨が定義されている場合は、前記オブジェクトのフィールドの値を、前記並べ替えた順序に従って前記配列として記載する前記[1]又は[2]に記載のシリアル化方法。
[4]前記クラスに関連付けられた情報は、少なくとも前記オブジェクトのクラス名を予め定めた関数で変換したハッシュ値である前記[1]から[3]のいずれかに記載のシリアル化方法。
[5]情報を処理するコンピュータにおいて、
オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を記載せずに、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載して、当該オブジェクトのクラスに関連付けられた情報とともにシリアル化されたデータからクラスに関連付けられた情報を取得するステップと、
前記クラスのフィールド情報を取得するステップと、
前記シリアル化されたオブジェクトのデータのフィールド値に対応する値が、前記取得したフィールド名を予め定めた順番で並べ替えたものに対応して並んでいるものとして取得して、前記取得したフィールド名とともに復元するステップと、
前記取得されたクラスに関連付けられた情報、前記フィールド情報、前記フィールド値を復元されたオブジェクトとして出力するステップとを有する逆シリアル化方法。
[6]前記復元するステップは、前記オブジェクトのフィールド値が配列として記載されている場合、前記シリアル化されたオブジェクトのデータのフィールド値に対応する値が、前記取得したフィールド名を予め定めた順番で並べ替えて前記配列として記載されているものとして取得して、前記取得したフィールド名とともに復元する前記[5]に記載の逆シリアル化方法。
[7]コンピュータを、
オブジェクトのクラスに関連付けられた情報を記載し、前記オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を記載せずに、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載し、前記記載されたクラスに関連付けられた情報と、前記並べ替えられたフィールド値をシリアル化されたデータとして出力するシリアル化手段として機能させる情報処理プログラム。
[8]コンピュータを、
オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を記載せずに、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載して、当該オブジェクトのクラスに関連付けられた情報とともにシリアル化されたデータからクラスに関連付けられた情報を取得し、前記クラスのフィールド情報を取得し、前記シリアル化されたオブジェクトのデータのフィールド値に対応する値が、前記取得したフィールド名を予め定めた順番で並べ替えたものに対応して並んでいるものとして取得して、前記取得したフィールド名とともに復元し、前記取得されたクラスに関連付けられた情報、前記フィールド情報、前記フィールド値を復元されたオブジェクトとして出力する逆シリアル化手段として機能させる情報処理プログラム。
[9]オブジェクトのクラスに関連付けられた情報を記載し、前記オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を記載せずに、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載し、前記記載されたクラスに関連付けられた情報と、前記並べ替えられたフィールド値をシリアル化されたデータとして出力するシリアル化手段を有する情報処理装置。
[10]オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を記載せずに、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載して、当該オブジェクトのクラスに関連付けられた情報とともにシリアル化されたデータからクラスに関連付けられた情報を取得し、前記クラスのフィールド情報を取得し、前記シリアル化されたオブジェクトのデータのフィールド値に対応する値が、前記取得したフィールド名を予め定めた順番で並べ替えたものに対応して並んでいるものとして取得して、前記取得したフィールド名とともに復元し、前記取得されたクラスに関連付けられた情報、前記フィールド情報、前記フィールド値を復元されたオブジェクトとして出力する逆シリアル化手段を有する情報処理装置。
[11]前記[9]及び前記[10]に記載の情報処理装置を複数通信可能に接続して構成される通信システム。
【手続補正書】
【提出日】2022-08-16
【手続補正1】
【補正対象書類名】特許請求の範囲
【補正対象項目名】全文
【補正方法】変更
【補正の内容】
【特許請求の範囲】
【請求項1】
情報を処理するコンピュータにおいて、
オブジェクトのクラスに関連付けられた情報を記載するステップと、
前記オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を削除して、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載するステップと、
前記記載されたクラスに関連付けられた情報と、前記並べ替えられたフィールド値をシリアル化されたデータとして出力するステップとを有するシリアル化方法。
【請求項2】
前記オブジェクトがサブクラスのインスタンスの場合、前記サブクラスが定義するフィールド名に加えてスーパークラスが定義するフィールド名を合わせたフィールド名について前記サブクラス及び前記スーパークラスに関わらず予め定めた順番に従って並べ替える請求項1に記載のシリアル化方法。
【請求項3】
前記フィールド値を並べ替えた順に記載するステップは、前記オブジェクトのフィールドの値を配列として記載する旨が定義されている場合は、前記オブジェクトのフィールドの値を、前記並べ替えた順序に従って前記配列として記載する請求項1又は2に記載のシリアル化方法。
【請求項4】
前記クラスに関連付けられた情報は、少なくとも前記オブジェクトのクラス名を予め定めた関数で変換したハッシュ値である請求項1から3のいずれか1項に記載のシリアル化方法。
【請求項5】
情報を処理するコンピュータにおいて、
オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を削除して、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載して、当該オブジェクトのクラスに関連付けられた情報とともにシリアル化されたデータからクラスに関連付けられた情報を取得するステップと、
前記クラスのフィールド情報を取得するステップと、
前記シリアル化されたオブジェクトのデータのフィールド値に対応する値が、前記取得したフィールド名を予め定めた順番で並べ替えたものに対応して並んでいるものとして取得して、前記取得したフィールド名とともに復元するステップと、
前記取得されたクラスに関連付けられた情報、前記フィールド情報、前記フィールド値を復元されたオブジェクトとして出力するステップとを有する逆シリアル化方法。
【請求項6】
前記復元するステップは、前記オブジェクトのフィールド値が配列として記載されている場合、前記シリアル化されたオブジェクトのデータのフィールド値に対応する値が、前記取得したフィールド名を予め定めた順番で並べ替えて前記配列として記載されているものとして取得して、前記取得したフィールド名とともに復元する請求項5に記載の逆シリアル化方法。
【請求項7】
コンピュータを、
オブジェクトのクラスに関連付けられた情報を記載し、前記オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を削除して、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載し、前記記載されたクラスに関連付けられた情報と、前記並べ替えられたフィールド値をシリアル化されたデータとして出力するシリアル化手段として機能させる情報処理プログラム。
【請求項8】
コンピュータを、
オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を削除して、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載して、当該オブジェクトのクラスに関連付けられた情報とともにシリアル化されたデータからクラスに関連付けられた情報を取得し、前記クラスのフィールド情報を取得し、前記シリアル化されたオブジェクトのデータのフィールド値に対応する値が、前記取得したフィールド名を予め定めた順番で並べ替えたものに対応して並んでいるものとして取得して、前記取得したフィールド名とともに復元し、前記取得されたクラスに関連付けられた情報、前記フィールド情報、前記フィールド値を復元されたオブジェクトとして出力する逆シリアル化手段として機能させる情報処理プログラム。
【請求項9】
オブジェクトのクラスに関連付けられた情報を記載し、前記オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を削除して、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載し、前記記載されたクラスに関連付けられた情報と、前記並べ替えられたフィールド値をシリアル化されたデータとして出力するシリアル化手段を有する情報処理装置。
【請求項10】
オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を削除して、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載して、当該オブジェクトのクラスに関連付けられた情報とともにシリアル化されたデータからクラスに関連付けられた情報を取得し、前記クラスのフィールド情報を取得し、前記シリアル化されたオブジェクトのデータのフィールド値に対応する値が、前記取得したフィールド名を予め定めた順番で並べ替えたものに対応して並んでいるものとして取得して、前記取得したフィールド名とともに復元し、前記取得されたクラスに関連付けられた情報、前記フィールド情報、前記フィールド値を復元されたオブジェクトとして出力する逆シリアル化手段を有する情報処理装置。
【請求項11】
請求項9及び請求項10に記載の情報処理装置を複数通信可能に接続して構成される通信システム。
【手続補正2】
【補正対象書類名】明細書
【補正対象項目名】0008
【補正方法】変更
【補正の内容】
【0008】
[1]情報を処理するコンピュータにおいて、
オブジェクトのクラスに関連付けられた情報を記載するステップと、
前記オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を削除して、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載するステップと、
前記記載されたクラスに関連付けられた情報と、前記並べ替えられたフィールド値をシリアル化されたデータとして出力するステップとを有するシリアル化方法。
[2]前記オブジェクトがサブクラスのインスタンスの場合、前記サブクラスが定義するフィールド名に加えてスーパークラスが定義するフィールド名を合わせたフィールド名について前記サブクラス及び前記スーパークラスに関わらず予め定めた順番に従って並べ替える前記[1]に記載のシリアル化方法。
[3]前記フィールド値を並べ替えた順に記載するステップは、前記オブジェクトのフィールドの値を配列として記載する旨が定義されている場合は、前記オブジェクトのフィールドの値を、前記並べ替えた順序に従って前記配列として記載する前記[1]又は[2]に記載のシリアル化方法。
[4]前記クラスに関連付けられた情報は、少なくとも前記オブジェクトのクラス名を予め定めた関数で変換したハッシュ値である前記[1]から[3]のいずれかに記載のシリアル化方法。
[5]情報を処理するコンピュータにおいて、
オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を削除して、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載して、当該オブジェクトのクラスに関連付けられた情報とともにシリアル化されたデータからクラスに関連付けられた情報を取得するステップと、
前記クラスのフィールド情報を取得するステップと、
前記シリアル化されたオブジェクトのデータのフィールド値に対応する値が、前記取得したフィールド名を予め定めた順番で並べ替えたものに対応して並んでいるものとして取得して、前記取得したフィールド名とともに復元するステップと、
前記取得されたクラスに関連付けられた情報、前記フィールド情報、前記フィールド値を復元されたオブジェクトとして出力するステップとを有する逆シリアル化方法。
[6]前記復元するステップは、前記オブジェクトのフィールド値が配列として記載されている場合、前記シリアル化されたオブジェクトのデータのフィールド値に対応する値が、前記取得したフィールド名を予め定めた順番で並べ替えて前記配列として記載されているものとして取得して、前記取得したフィールド名とともに復元する前記[5]に記載の逆シリアル化方法。
[7]コンピュータを、
オブジェクトのクラスに関連付けられた情報を記載し、前記オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を削除して、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載し、前記記載されたクラスに関連付けられた情報と、前記並べ替えられたフィールド値をシリアル化されたデータとして出力するシリアル化手段として機能させる情報処理プログラム。
[8]コンピュータを、
オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を削除して、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載して、当該オブジェクトのクラスに関連付けられた情報とともにシリアル化されたデータからクラスに関連付けられた情報を取得し、前記クラスのフィールド情報を取得し、前記シリアル化されたオブジェクトのデータのフィールド値に対応する値が、前記取得したフィールド名を予め定めた順番で並べ替えたものに対応して並んでいるものとして取得して、前記取得したフィールド名とともに復元し、前記取得されたクラスに関連付けられた情報、前記フィールド情報、前記フィールド値を復元されたオブジェクトとして出力する逆シリアル化手段として機能させる情報処理プログラム。
[9]オブジェクトのクラスに関連付けられた情報を記載し、前記オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を削除して、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載し、前記記載されたクラスに関連付けられた情報と、前記並べ替えられたフィールド値をシリアル化されたデータとして出力するシリアル化手段を有する情報処理装置。
[10]オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を削除して、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載して、当該オブジェクトのクラスに関連付けられた情報とともにシリアル化されたデータからクラスに関連付けられた情報を取得し、前記クラスのフィールド情報を取得し、前記シリアル化されたオブジェクトのデータのフィールド値に対応する値が、前記取得したフィールド名を予め定めた順番で並べ替えたものに対応して並んでいるものとして取得して、前記取得したフィールド名とともに復元し、前記取得されたクラスに関連付けられた情報、前記フィールド情報、前記フィールド値を復元されたオブジェクトとして出力する逆シリアル化手段を有する情報処理装置。
[11]前記[9]及び前記[10]に記載の情報処理装置を複数通信可能に接続して構成される通信システム。