Deprecated: The each() function is deprecated. This message will be suppressed on further calls in /home/zhenxiangba/zhenxiangba.com/public_html/phproxy-improved-master/index.php on line 456
JP7253172B2 - シリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システム - Google Patents
[go: Go Back, main page]

JP7253172B2 - シリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システム - Google Patents

シリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システム Download PDF

Info

Publication number
JP7253172B2
JP7253172B2 JP2021078133A JP2021078133A JP7253172B2 JP 7253172 B2 JP7253172 B2 JP 7253172B2 JP 2021078133 A JP2021078133 A JP 2021078133A JP 2021078133 A JP2021078133 A JP 2021078133A JP 7253172 B2 JP7253172 B2 JP 7253172B2
Authority
JP
Japan
Prior art keywords
field
class
information
field names
names
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
JP2021078133A
Other languages
English (en)
Other versions
JP2022171464A (ja
Inventor
直樹 宮永
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Soft Gear Co Ltd
Original Assignee
Soft Gear Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Soft Gear Co Ltd filed Critical Soft Gear Co Ltd
Priority to JP2021078133A priority Critical patent/JP7253172B2/ja
Priority to EP22795722.2A priority patent/EP4254905A4/en
Priority to KR1020237018616A priority patent/KR102628135B1/ko
Priority to CN202280007235.6A priority patent/CN116368788A/zh
Priority to PCT/JP2022/018731 priority patent/WO2022230809A1/ja
Priority to US17/963,194 priority patent/US20230051879A1/en
Publication of JP2022171464A publication Critical patent/JP2022171464A/ja
Application granted granted Critical
Publication of JP7253172B2 publication Critical patent/JP7253172B2/ja
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/4493Object persistence
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • G06F8/315Object-oriented languages
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/06Protocols specially adapted for file transfer, e.g. file transfer protocol [FTP]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Information Transfer Between Computers (AREA)

Description

本発明は、シリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システムに関する。
従来の技術として、オブジェクトをシリアル化する際の通信データサイズを縮小する情報処理装置が提案されている(例えば、特許文献1参照)。
特許文献1に開示された情報処理装置は、データオブジェクトをシリアル化する際に全てのデータを直列に並べず、複数のデータに区切り、必ずしも送る必要のないデータの区分は省略して並べて通信データを作成する。複数区分毎に、省略の有無を示す省略フラグビットを付加して通信データを送信し、受信側装置では当該省略フラグビットに基づいて受信した通信データを正しく復元する。
特開2008‐203959号公報
しかし、特許文献1の情報処理装置は、通信データの一部を省略してデータサイズを縮小することで通信時間の短縮を実現するものの、送っているのは省略フラグビットのみであり、例えば、シリアル化の対象となるオブジェクトの種類及びオブジェクト内のデータの並び順序等の情報については送っていない。つまり、これらの情報を順序送信側と受信側で予め共有していることが前提となるものであり、特許文献1の情報処理装置は、オブジェクトの種類に依存しない通信に対応するものではない、という問題がある。また、データの送信順が一定であるため、例えば、継承等を伴うオブジェクトや異なる言語間での通信、異なるコンパイラバージョン間での通信に対応するものではない、という問題がある。
従って本発明の目的は、通信の条件に柔軟に対応するとともに、通信データサイズを縮小するシリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システムを提供することにある。
本発明の一態様は、上記目的を達成するため、以下のシリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システムを提供する。
[1]情報を処理するコンピュータにおいて、
オブジェクトのクラスに関連付けられた情報を記載するステップと、
前記オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を削除して、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載するステップと、
前記記載されたクラスに関連付けられた情報と、前記並べ替えられたフィールド値をシリアル化されたデータとして出力するステップとを有するシリアル化方法。
[2]前記オブジェクトがサブクラスのインスタンスの場合、前記サブクラスが定義するフィールド名に加えてスーパークラスが定義するフィールド名を合わせたフィールド名について前記サブクラス及び前記スーパークラスに関わらず予め定めた順番に従って並べ替える前記[1]に記載のシリアル化方法。
[3]前記フィールド値を並べ替えた順に記載するステップは、前記オブジェクトのフィールドの値を配列として記載する旨が定義されている場合は、前記オブジェクトのフィールドの値を、前記並べ替えた順序に従って前記配列として記載する前記[1]又は[2]に記載のシリアル化方法。
[4]前記クラスに関連付けられた情報は、少なくとも前記オブジェクトのクラス名を予め定めた関数で変換したハッシュ値である前記[1]から[3]のいずれかに記載のシリアル化方法。
[5]情報を処理するコンピュータにおいて、
オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を削除して、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載して、当該オブジェクトのクラスに関連付けられた情報とともにシリアル化されたデータからクラスに関連付けられた情報を取得するステップと、
前記クラスのフィールド情報を取得するステップと、
前記シリアル化されたオブジェクトのデータのフィールド値に対応する値が、前記取得したフィールド名を予め定めた順番で並べ替えたものに対応して並んでいるものとして取得して、前記取得したフィールド名とともに復元するステップと、
前記取得されたクラスに関連付けられた情報、前記フィールド情報、前記フィールド値を復元されたオブジェクトとして出力するステップとを有する逆シリアル化方法。
[6]前記復元するステップは、前記オブジェクトのフィールド値が配列として記載されている場合、前記シリアル化されたオブジェクトのデータのフィールド値に対応する値が、前記取得したフィールド名を予め定めた順番で並べ替えて前記配列として記載されているものとして取得して、前記取得したフィールド名とともに復元する前記[5]に記載の逆シリアル化方法。
[7]コンピュータを、
オブジェクトのクラスに関連付けられた情報を記載し、前記オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を削除して、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載し、前記記載されたクラスに関連付けられた情報と、前記並べ替えられたフィールド値をシリアル化されたデータとして出力するシリアル化手段として機能させる情報処理プログラム。
[8]コンピュータを、
オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を削除して、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載して、当該オブジェクトのクラスに関連付けられた情報とともにシリアル化されたデータからクラスに関連付けられた情報を取得し、前記クラスのフィールド情報を取得し、前記シリアル化されたオブジェクトのデータのフィールド値に対応する値が、前記取得したフィールド名を予め定めた順番で並べ替えたものに対応して並んでいるものとして取得して、前記取得したフィールド名とともに復元し、前記取得されたクラスに関連付けられた情報、前記フィールド情報、前記フィールド値を復元されたオブジェクトとして出力する逆シリアル化手段として機能させる情報処理プログラム。
[9]オブジェクトのクラスに関連付けられた情報を記載し、前記オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を削除して、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載し、前記記載されたクラスに関連付けられた情報と、前記並べ替えられたフィールド値をシリアル化されたデータとして出力するシリアル化手段を有する情報処理装置。
[10]オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を削除して、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載して、当該オブジェクトのクラスに関連付けられた情報とともにシリアル化されたデータからクラスに関連付けられた情報を取得し、前記クラスのフィールド情報を取得し、前記シリアル化されたオブジェクトのデータのフィールド値に対応する値が、前記取得したフィールド名を予め定めた順番で並べ替えたものに対応して並んでいるものとして取得して、前記取得したフィールド名とともに復元し、前記取得されたクラスに関連付けられた情報、前記フィールド情報、前記フィールド値を復元されたオブジェクトとして出力する逆シリアル化手段を有する情報処理装置。
[11]前記[9]及び前記[10]に記載の情報処理装置を複数通信可能に接続して構成される通信システム。
請求項1、5、8、9、10、11に係る発明によれば、通信の条件に柔軟に対応するとともに、通信データサイズを縮小することができる。
請求項2、6に係る発明によれば、オブジェクトがサブクラスのインスタンスである場合であっても、通信の条件に柔軟に対応するとともに、通信データサイズを縮小することができる。
請求項3、7に係る発明によれば、オブジェクトのフィールドの値に配列が定められている場合であっても、通信の条件に柔軟に対応するとともに、通信データサイズを縮小することができる。
請求項4に係る発明によれば、クラスに関連付けられた情報は、少なくともオブジェクトのクラス名を予め定めた関数で変換したハッシュ値とすることができる。
図1は、実施の形態に係る通信システムの構成の一例を示す概略図である。 図2は、実施の形態に係るサーバ装置の構成例を示すブロック図である。 図3Aは、項目対応表の構成を示す図である。 図3Bは、項目対応表の構成を示す図である。 図4は、シリアル化動作の一例を示すフローチャートである。 図5は、シリアル化動作の他の例を示すフローチャートである。 図6は、シリアル化動作の他の例を示すフローチャートである。 図7は、逆シリアル化動作の一例を示すフローチャートである。 図8は、逆シリアル化動作の他の例を示すフローチャートである。 図9は、シリアル化動作の一例を示すフローチャートである。 図10は、クラスの構成の具体的例を示す図であり、図10(a)が「Employee」クラス、図10(b)が「Manager」クラス、図10(c)が「Project」クラスである。 図11(a)~(c)は、インスタンスをシリアル化したデータの構成の一例を示す図である。 図12は、クラスの構成の具体的例を示す図であり、図12(a)が「Employee」クラス、図12(b)が「Manager」クラス、図12(c)が「Project」クラスである。 図13(a)~(c)は、インスタンスをシリアル化したデータの構成の一例を示す図である。 図14は、クラスの構成の具体的例を示す図であり、図14(a)が「Employee」クラス、図14(b)が「Manager」クラス、図14(c)が「Project」クラスである。 図15(a)~(c)は、インスタンスをシリアル化したデータの構成の一例を示す図である。
[実施の形態]
(通信システムの構成)
図1は、実施の形態に係る通信システムの構成の一例を示す概略図である。
この通信システムは、情報処理装置としてのサーバ装置1と、端末装置2a、2bとをネットワークによって互いに通信可能に接続することで構成される。
サーバ装置1は、サーバ型の情報処理装置であり、操作者の操作する端末装置2a、2bの要求に応じて動作するものであって、本体内に情報を処理するための機能を有するCPU(Central Processing Unit)やHDD(Hard Disk Drive)又はフラッシュメモリ、揮発性メモリ、LANボード(無線/有線)等の電子部品を備える。サーバ装置1は、端末装置2a、2bと通信し、データの送受信を行うことで端末装置2a、2b上で動作するデータの同期を行うものであって、例えば、ゲームサーバ等である。なお、サーバ装置1は、複数のクラスターによって構成してもよく、分散処理を実行するよう構成してもよい。
端末装置2a、2bは、端末型の情報処理装置であり、プログラムに基づいて動作するものであって、本体内に情報を処理するための機能を有するCPUやHDD又はフラッシュメモリ等の電子部品を備える。端末装置2a、2bは、例えば、MMOG(Massively Multiplayer Online Game)等のプログラムに基づいて動作し、動作の結果としてデータをサーバ装置1に対して逐次出力するとともに、サーバ装置1から他の端末の動作の結果としてのデータを受信して各端末2a、2b間で高頻度にゲームオブジェクトを同期するものである。なお、端末装置2は2つの装置で描かれているが単一の装置であってもよいし、3以上の装置で構成してもよい。
ネットワーク4は、高速通信が可能な通信ネットワークであり、例えば、イントラネットやLAN(Local Area Network)等の有線又は無線の通信網である。
一例として、サーバ装置1及び端末装置2a、2bは、各装置内でオブジェクトとして保持していた情報を、各装置間でデータを送信する際にシリアル化し、受信する際に逆シリアル化する。また、各装置内でオブジェクトとして保持していた情報を、HDD等の記憶部に記録する際にシリアル化し、読み出す際に逆シリアル化する。シリアル化及び逆シリアル化の詳細について、以降、実施の形態において具体的に説明する。
また、本実施の形態において使用する「オブジェクト」、「クラス」、「フィールド」、「インスタンス」、「型」等の語句は、例えば、Java(登録商標)、C++、C#、Python、JavaScript(登録商標)、Ruby等で用いられる同語句と同義で用いられるが、以降、クラス、及びインスタンス化されたクラス(インスタンス)のことを総称して「オブジェクト」と言う場合がある。また、説明では、例としてJava言語の関数名やコード例を示すが、他のオブジェクト指向言語でも対応する同様の機能を有する。「クラス」は、プログラムを実行するための処理をまとめたものであり、クラス中には処理を実行するメソッド、メソッドが処理を実行する際に用いる変数としてフィールドが含まれる。オブジェクトは0個以降のフィールドを有し、各フィールドは、単数又は複数のフィールド名、フィールド値を有する。「型」は、数値、文字列、論理値、null、undefined、オブジェクト型を含み、「タイプ」と言う場合がある。クラスは、内部にさらにクラスを含む場合があり、他のクラスを継承する場合がある。また、フィールド値は、原則としてある値を有するが、処理段階まで定まらない変数である場合もある。また、「Primitive Type」は、オブジェクト型ではない、すなわち、フィールドやメソッドを持たない値のみの型であり、「Primitive Value」は、その値のことを言う。
また、「シリアル化」のことを「シリアライゼーション」、「直列化」と言う場合があり、「シリアル化」することを「シリアライズ」と言う場合がある。同様に、「逆シリアル化」のことを「デシリアライゼーション」、「逆直列化」、「直列化復元」と言う場合があり、「逆シリアル化」することを「デシリアライズ」と言う場合がある。
(サーバ装置の構成)
図2は、実施の形態に係るサーバ装置1の構成例を示すブロック図である。
サーバ装置1は、CPU(Central Processing Unit)等から構成され、各部を制御するとともに、各種のプログラムを実行する制御部10と、フラッシュメモリ等の記憶媒体から構成され情報を記憶する記憶部11と、一時的に情報を記憶するメモリ12と、ネットワークを介して外部と通信する通信部13とを備える。
制御部10は、後述する情報処理プログラムとしての情報処理プログラム110を実行することで、データ受信手段100、逆シリアル化手段101、オブジェクト処理手段102、シリアル化手段103及びデータ送信手段104等として機能する。
データ受信手段100は、通信部13を介して端末装置2a、2bからシリアル化されたデータを受信する。
逆シリアル化手段101は、データ受信手段100が受信したデータを逆シリアル化(デシリアライズ)してオブジェクト120、121…としてメモリ12に書き込む。逆シリアル化の詳細は後述する。
オブジェクト処理手段102は、オブジェクト120、121…について必要な処理を実行する。
シリアル化手段103は、メモリ12のオブジェクト120、121…(又はオブジェクト120、121…が加工されたオブジェクト)をシリアル化(シリアライズ)する。また、シリアル化手段103は、オブジェクト120、121…をシリアル化して記録データ111として保存する場合がある。シリアル化の詳細は後述する。
データ送信手段104は、シリアル化手段103がシリアル化したデータを、通信部14を介して端末装置2b、2aに送信する。
記憶部11は、制御部10を上述した各手段100‐104として動作させる情報処理プログラム110、記録データ111、項目対応表112等を記憶する。
メモリ12は、オブジェクト120、121…及びその他の情報を一時的に記憶する。
なお、端末装置2a、2bは、サーバ装置1と同様の構成に加え、操作部及び表示部を備える。サーバ装置1と構成が共通する部分については説明を省略する。
図3A及び図3Bは、項目対応表112の構成を示す図である。
項目対応表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に対して独自の拡張を行ったフォーマットの定義である。
項目対応表112は、フォーマット名を示すformat nameと、バイナリ(2進数表記)コーディングした場合、バイナリ表現でのデータブロックの最初の1バイト目の内容を示すfirst byte (in binary)と、HEX(16進数表記)でのデータブロックの最初の1バイト目の内容を示すfirst byte (in hex)と、データブロックの2バイト目以降に固定で追加されるバイト数を示す追加バイトと、データブロックで最初の1バイト目と(もしあれば)次の固定追加バイトに続く、可変バイト数の値又は範囲を示す可変バイトと、ブロック全体のフォーマット長の値又は範囲を示すフォーマット長と、特記事項を示すRemarksを有する。
(情報処理装置の動作)
次に、本実施の形態の作用を、(1)基本動作、(2)シリアル化動作、(3)逆シリアル化動作に分けて説明する。
(1)基本動作
端末装置2a、2bは、例えば、ネットワーク対戦型ゲームのプログラムを実行するものであり、プログラムの実行に伴い複数のオブジェクトを逐次処理する。サーバ装置1は、端末装置2a、2bにおいてプログラムが実行される際に処理されるオブジェクトの同期を行う。サーバ装置1及び端末装置2a、2bは、互いに変更が生じたオブジェクトを送信し、受信したオブジェクトで変更を反映することで同期を行う。
サーバ装置1及び端末装置2a、2bは、各装置内でオブジェクトとして保持していた情報を、各装置間でデータを送信する際にシリアル化し、受信する際に逆シリアル化する。また、各装置内でオブジェクトとして保持していた情報を、HDD等の記憶部に記録する際にシリアル化し、読み出す際に逆シリアル化する。以下、サーバ装置1及び端末装置2a、2bのシリアル化動作及び逆シリアル化動作並びにこれに伴う動作について説明するが、いずれの装置においても動作内容が共通するため、代表してサーバ装置1の動作について説明する。
データの同期において端末装置2a、2bからデータを受信する際に、サーバ装置1のデータ受信手段100は、通信部13を介して端末装置2a、2bからシリアル化されたデータを受信する。
次に、サーバ装置1の逆シリアル化手段101は、データ受信手段100が受信したデータを逆シリアル化(デシリアライズ)してオブジェクト120、121…としてメモリ12に書き込むことで端末装置2a、2bとオブジェクトの内容を同期する。なお、逆シリアル化の詳細は「(3)逆シリアル化動作」において説明する。
次に、サーバ装置1のオブジェクト処理手段102は、オブジェクト120、121…について必要な処理を実行する。
次に、サーバ装置1のシリアル化手段103は、メモリ12のオブジェクト120、121…をシリアル化(シリアライズ)する。また、シリアル化手段103は、オブジェクト120、121…をシリアル化して記録データ111として保存する場合がある。シリアル化の詳細は「(2)シリアル化動作」において説明する。
次に、サーバ装置1のデータ送信手段104は、シリアル化手段103がシリアル化したデータを、通信部14を介して端末装置2b、2aに送信する。
(2)シリアル化動作
まず、サーバ装置1のシリアル化手段103は、基本のシリアル化手順として、まず、シリアル化の対象となるオブジェクトのクラスに関連付けられた情報を、シリアル化したデータとして記録して、これに続き、さらにフィールド名をアルファベット順に並び替えて、フィールド値のみを記録する(フィールド名を記録しない。)。なお、この情報の記録順、記録の動作順は、予め定めた規則に基づいていれば変更してもよい。具体的な記録順は図11、図13、図15に示す。
なお、「クラスに関連付けられた情報」とは逆シリアル化する時にクラスを復元するのに必要なクラスの情報で、クラス名やクラスの型定義を含む。ジェネリッククラスのインスタンスの場合は、さらに、型パラメータのクラスに関連付けられた情報を含む。クラスの定義そのものをエンコーディングするのは現実的ではないので、クラス定義そのものはシリアル化と逆シリアル化側で同じものを持ち、完全なクラス名の文字列で表現することもできる。本実施形態では、シリアル化で使用するクラスについては(逆シリアル化においても同様に使用する。)、事前にクラスIDに対応付けられた情報を用意しておき、クラスとクラスIDを関連付ける。具体的な関連付けとして、一例として、ハッシュ関数を用い、クラス名の文字列(jp.co.soft‐gear.sample.Employee等)を計算して4バイトのハッシュ値を対応付けた情報を生成する。シリアル化では、完全なクラス名(クラス名のフルネーム、Employeeなどのショート名でなく、jp.co.soft‐gear.sample.Employeeなどのフルパス)が指定されると、事前登録した情報に基づいて4バイトの値に変換され、この値を用いて「クラスに関する情報」としてクラス名をシリアル化する。なお、ハッシュ値はクラス名から一意に決まるが、ハッシュ値からもクラス名が一意に決まるように、十分なデータ量を準備する必要がある。本実施レ形態では4バイト(UINT32)用意する。4バイト用意したことで42億通り以上のハッシュ値に分散され、異なるクラスが同一のハッシュ値を持つことは極めてまれであり、そのような状況を低減できる。汎用性を犠牲にして、アプリケーション独自の対応表(クラスとクラスIDの対応表)を作ることも可能である。その場合は、シリアル化の対象となるオブジェクトが256個以下であれば、わずか1バイトでクラスに対応する情報を表現することができる。次に、オブジェクトの種類によるシリアル化動作の例を説明する。
図4は、シリアル化動作の一例を示すフローチャートである。
シリアル化手段103は、シリアル化の対象となるオブジェクトの内容を確認するが、まず、オブジェクトの型が標準かつ明確か確認し(S10)、標準かつ明確である場合(S10;Yes)、Collectionオブジェクトであるか確認する(S11)。なお、ここで「標準」とは、図3Aの項目対応表112Aに属する型を指す。また、「明確」とは、インスタンス化により不変で固定された型を指す。例えば、ジェネリック型オブジェクトのインスタンスにおいて、フィールドの型がインスタンス化時のパラメータとして指定されるパラメータ型でないことである。また別の例では、フィールドの値の型がフィールドの定義型と一致していて、サブクラスでない場合である。言い換えれば、Primitive型かCollection型のいずれかである。
次に、シリアル化手段103は、シリアル化の対象となるオブジェクトがCollectionオブジェクトである場合(S11;Yes)、配列(Array又はMap)の各要素の型と要素数を記録し、それぞれの要素について値のシリアル化手順を実行する(S12)。
また、シリアル化手段103は、シリアル化の対象となるオブジェクトがCollectionオブジェクトでない場合(S11;No)、Primitive valueであるか確認して(S13)、Primitive valueである場合は(S13;Yes)、型と値を記録する(S14)。
また、シリアル化手段103は、シリアル化の対象となるオブジェクトの型が標準かつ明確でない場合(S10;No)、拡張定義型のクラスのインスタンスか確認し(S15)、拡張定義型のクラスのインスタンスである場合(S15;Yes)、拡張定義型の型を記録し、値についてシリアル化を実行し、Primitive valueとして記録する(S16)。なお、逆シリアル化を行うプログラムの言語の関係によっては、逆シリアル化でオブジェクトを復元する際に、タイプパラメータの情報が不要な場合もある。その場合は、拡張定義型の型情報を省略して、通常のPrimitive valueとして記録してもよい。シリアル化データとして記載するのに必要なバイト数を節約できる。例えば、プログラム言語間の仕様の差が小さく型キャストによる代入でフィールドが復元できる場合である。
また、シリアル化手段103は、シリアル化の対象となるオブジェクトが拡張定義型のクラスのインスタンスでない場合(S15;No)、ユーザ定義型のクラスのインスタンスか確認し(S17)、ユーザ定義型のクラスのインスタンスである場合(S17;Yes)、クラスIDを記録し、シリアル化手順を実行して、フィールド名をアルファベット順に並び替えてフィールド値のみをArrayとして記録する(S18)。
また、シリアル化手段103は、シリアル化の対象となるオブジェクトがユーザ定義型のクラスのインスタンスでない場合(S17;No)、ユーザ定義型のGenericsクラスのインスタンスか確認し(S19)、ユーザ定義型のGenericsクラスのインスタンスである場合(S19;Yes)、クラスID(Generics)を記録し、Genericsのタイプパラメータ(型パラメータ)で指定されたクラス1以上についてシリアル化手順を実行し、クラスIDのArray(Collection)として記録するとともに、フィールドについてシリアル化手順を実行して、フィールド名をアルファベット順に並び替えてフィールド値のみをArray(Collection)として記録する(S18)。
また、シリアル化手段103は、シリアル化の対象となるオブジェクトがユーザ定義型のGenericsクラスのインスタンスでない場合(S19;No)、エラーを返す。
上記ステップS17~S20のシリアル化の対象となるオブジェクトがユーザ定義型のクラスである場合について、シリアル化の具体的な動作手順について以下説明する。
図5は、シリアル化動作の他の例を示すフローチャートである。
シリアル化手段103は、対象のオブジェクトがGenericクラスのインスタンスか確認し(S30)、Genericクラスのインスタンスである場合(S30;Yes)、まず、1つ目の要素について、MessagePackのFIXEXT4として以下のように記述する。まず、FIXEXT4の識別子として(0xD6)、続いてTYPE(1バイト)として0x15(Generics)、最後にDATA(4バイト)として、当該インスタンスのクラス情報として登録済の4バイトのID(ハッシュ値UINT32)、をそれぞれコードとして書き出す(S31)。
次に、2つ目の要素について、Genericクラスのタイプパラメータとして使われている1個以上のクラスの情報をUint32のArrayとして書き出す(S32)。なお、クラス情報は、ユーザ定義型オブジェクトの場合は、予め登録済のハッシュ値、それ以外の場合は予め定義している拡張型のコードを使用する。なお、ジェネリックオブジェクトの種類とシリアル化と逆シリアル化を行うプログラムの言語の関係によっては、逆シリアル化でオブジェクトを復元する際に、タイプパラメータの情報が不要な場合もある。その場合は、タイプパラメータの情報を添付せずに、通常のオブジェクトとしてシリアル化してもよい。シリアル化データとして記載するのに必要なバイト数を節約できる。例えば、タイプパラメータがメソッドの定義のみに使われ、フィールドの定義に使われてない場合である。別の例では、プログラム言語間の仕様の差が小さく型キャストによる代入でフィールドが復元できる場合である。
また、シリアル化手段103は、対象のオブジェクトがGenericクラスのインスタンスでない場合(S30;No)、1つ目の要素について、まずFIXEXT4の識別子として(0xD6)、続いてTYPE(1バイト)として0x0F(Object)、最後にDATA(4バイト)として、このインスタンスのクラス情報として登録済の4バイトのID(ハッシュ値UINT32)、をそれぞれコードとして書き出す(S34)。
次に、最後の要素(Genericsクラスのインスタンスの場合は3つ目の要素、それ以外の通常のクラスのインスタンスの場合は2つ目の要素)について、図6に示すフローチャートに従い、フィールド情報をコードとして書き出す(S33)。
図6は、シリアル化動作の他の例を示すフローチャートである。
図5のフローチャートのステップS33において、シリアル化手段103は、まず、リフレクションを行い、クラスに定義されているフィールド名を継承分も含めて取得し、フィールド名のリストAを作成する(getDeclaredField())(S70)。なお、getDeclaredFieldは、自身のクラスと継承している上位のクラスの分(階層が深ければ階層分だけ)実行する。
また、フィールド名のリストAから、シリアル化対象外のフィールドを除外したリストBを作成する(S71)。ここで、getModifiersでフィールドのModifierを検査する。なお、シリアライゼーションの対象としないフィールド、具体的には、StaticやTransientを除く。
次に、フィールド名のリストBをアルファベット順(あるいは、シリアル化・シリアル化復元間で共通のソートアルゴリズム)でソートしたリストCを作成する(S72)。
次に、リストCの要素数個数分だけのarrayを出力するという内容のコードを書き出す(S73)。例えば、要素数0ならarray[0]というコード、要素数3ならarray[3]というコードを書き出す(当該動作は、MessagePackの仕様に準拠している。)。
次に、シリアル化手段103は、リストCが空か確認し(S74)、空でなければ(S74;No)、リストCからフィールド名を1つ取り出し(S75)、取り出したフィールド名の値をシリアル化し、コードを書き出す(S76)。なお、Primitive Valueになるまで再帰的にシリアル化を繰り返す(図4のS10~S20を繰り返す。)。
次に、シリアル化手段103は、リストCが空となったら(S74;Yes)、処理を終了する。
以下、シリアル化したインスタンスの具体例を説明する。
図10は、クラスの構成の具体的例を示す図であり、(a)が「Employee」クラス、(b)が「Manager」クラス、(c)が「Project」クラスであって、図12、図14においてそれぞれ異なる定義を有する場合について説明する。図11、図13、図15は、図10、図12、図14のクラスをインスタンス化した後、シリアル化した例である。なお、インスタンス化は、それぞれ、以下の表1A、表1B、および、表1Cに基づいて行う。
Figure 0007253172000001
Figure 0007253172000002
Figure 0007253172000003
図11(a)~(c)は、インスタンスをシリアル化したデータの構成の一例を示す図であって、図11(a)はEmployeeクラスについて太郎のインスタンスを、図11(b)はManagerクラスについて花子のインスタンスを、図11(c)はProjectクラスについてProject Xのインスタンスを、それぞれシリアル化したデータの例である。
図11(a)に示すように、フィールド値に単純な値のみを有する基本的なオブジェクトを対象とする場合、データ120i11は、フォーマット識別子「FixExt4」、クラス名「Object“Employee”」に関連付けられたクラスIDのハッシュ値を含めてコーディングされる(コーディング結果は最上段参照。)。また、フィールド名がクラスで定義された順番「serialCode」、「deptCode」の順ではなく、フィールド名をアルファベット順「deptCode」、「serialCode」でソートしてから、フィールドの値「301」、「1」のみがフィールド個数だけ(NULLでもNULLとして)バイナリコーディングされる。
また、図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バイト目)として含む。
また、図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バイト目)として記述される。
また、図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」のサブクラスであり、型が一致していないので、逆シリアル化の時に正しくフィールドの値が正しく復元されるように拡張定義型を用いて型情報を詳細に記述する。
なお、図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バイト目)される。
また、図15(a)~(d)は、インスタンスをシリアル化したデータの構成の一例を示す図であって、図15(a)は「Employee」クラスについて太郎のインスタンスを、図15(b)は「Employee」クラスについて武蔵のインスタンスを、図15(c)は「Manager」クラスについて花子のインスタンスを、図15(d)は「Project」クラスについてProject Xのインスタンスを、それぞれシリアル化したデータの例である。
なお、図15(a)~(d)は、図13(a)~(d)に示した例とほぼ同等であるが、図15(d)のクラスでは、クラス「Project」にはフィールド「member」で記述するリストと区別して別フィード「leader」を記述できるようになっている。
上記したように、シリアル化されたデータは、MessagePackの仕様を踏襲しており、ブロックに分解して解釈できるように構成されている。また、ブロックの中に入れ子状にさらにブロックが含まれることもある。ブロックの先頭にはフォーマット識別子が記載され、当該フォーマット識別子によりその後に続くブロックのサイズとデータの種類が示される。つまり、次に説明する「(3)逆シリアル化動作」において、フォーマット識別子に基づいて、受信したデータ列を頭から順に解釈して、構造化したデータに復元可能となる。
(3)逆シリアル化動作
逆シリアル化手段101は、「(2)シリアル化動作」の逆の手順を踏むものであるが、基本の逆シリアル化手順として、まず、シリアル化されたデータからクラスに関連付けられた情報を取得し、当該情報からクラス名を特定してリフレクションによりフィールド情報(フィールドを復元するのに必要な情報であり、少なくともフィールド名及び型を含む。Genericsのタイプパラメータで指定された型や拡張データ型も含まれることもあり、その他にフィールドを復元するのに必要な情報を含んでいてもよい。)を取得する。次に、項目対応表112を参照しつつ、データからクラスの型情報を確認し、フィールド名をアルファベット順からクラスの定義順に並び替えて、フィールド値を復元する。以下に、ユーザ定義型の逆シリアル化動作について説明する。
なお、逆シリアル化する時は、クラスに関連付けられた情報であるクラスIDのハッシュ値を受信すると、予め用意したクラスとクラスIDとを対応付けた情報を検索して、フルネームのクラス名とクラスの定義を取得し、クラス情報を復元する。
図7は、逆シリアル化動作の一例を示すフローチャートである。
逆シリアル化手段101は、シリアル化されたデータがCollectionオブジェクトをシリアル化したものであるか確認し(S50)、Collectionオブジェクトをシリアル化したものである場合(S50;Yes)、型と要素数を取得し、それぞれの要素に該当するブロックについて基本の逆シリアル化手順を適用してそれぞれの要素を取得する(S51)。
次に、逆シリアル化手段101は、Collectionオブジェクトをシリアル化したものでない場合(S50;No)、Primitive型であるか確認して(S52)、Primitive型である場合は(S52;Yes)、型と値を取得する(S53)。
次に、逆シリアル化手段101は、拡張定義型のクラスのインスタンスをシリアル化したものか確認し(S54)、拡張定義型のクラスのインスタンスをシリアル化したものである場合(S54;Yes)、拡張定義型の型を取得し、値について逆シリアル化手順を実行し、Primitive valueとして復元する(S55)。
次に、逆シリアル化手段101は、拡張定義型のクラスのインスタンスをシリアル化したものでない場合(S54;No)、ユーザ定義型のクラスのインスタンスをシリアル化したものか確認し(S56)、ユーザ定義型のクラスのインスタンスをシリアル化したものである場合(S56;Yes)、クラスIDを取得し、登録済みのIDリストから対応するクラスを取得し、リフレクションを用いてクラスを特定する。特定したクラスのインスタンスを生成し、インスタンスのすべてのフィールドについて、フィールド名のアルファベット順に、取得した値を代入してオブジェクトを復元する(S57)。
次に、逆シリアル化手段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とし、フィールド名についてアルファベット順に並び替えて、対応するフィールド値を代入して取得する。
次に、逆シリアル化手段101は、ユーザ定義型のGenericsクラスのインスタンスをシリアル化したものでない場合(S58;No)、エラーを返す。
上記ステップS56~S59の逆シリアル化の対象となるデータがユーザ定義型のクラスのオブジェクトをシリアル化したものである場合について、逆シリアル化の具体的な動作手順について以下説明する。
図8は、逆シリアル化動作の他の例を示すフローチャートである。
逆シリアル化手段101は、まず、データの型がFIXEXT4(0xD6)のブロックに属するものか確認する(S60)。データの型がFIXEXT4(0xD6)のブロックに属するものである場合(S60;Yes)、FIXEXT4(0xD6)のブロック(6バイト)を読み込み、フォーマット識別子「FIXEXT4」に予め定義されたTYPE(1バイト)とDATA(4バイト)を取得する。DATAより復元するインスタンスのクラスに関連付けられた値(クラスID)を取得する(S61)。
次に、逆シリアル化手段101は、FIXEXT4のTYPEフィールドがGenerics(0x15)か確認する(S62)。TYPEがGenerics(0x15)である場合(S62;Yes)、次のArrayブロックを読み込み、タイプパラメータとして使われるクラスを1個以上取得する(S63)。なお、フィールドのシリアル化復元時にパラメータを持つクラスに、ここで取得したパラメータのクラスを適用する。
次に、逆シリアル化手段101は、次のArrayブロックを読み込み、図9に示すフローチャートに従いフィールド情報からインスタンスのフィールド値を復元する(S64)。なお、Genericオブジェクトについて、フィールド宣言型にパラメータが使用されている場合は、パラメータを適用したクラスのインスタンスとして復元する。
また、逆シリアル化手段101は、データの型がFIXEXT4(0xD6)のブロックに属するものでない場合(S60;No)、本手順の対象外であるため処理を終了する。
また、逆シリアル化手段101は、TYPEがGenerics(0x15)でない場合(S62;No)、TYPEがObject(0x0F)であれば(S65;Yes)、ステップS64へと進み、TYPEがObject(0x0F)でなければ(S65;No)、エラーを返す。
図9は、シリアル化動作の一例を示すフローチャートである。
まず、逆シリアル化手段101は、クラスに定義されているフィールド名を取得し(継承が複数階層の場合は上位の階層のフィールド名まで取得し)、フィールド名のリストAを作成する(getDeclaredField())(S80)。
次に、逆シリアル化手段101は、フィールド名のリストAから、シリアル化対象外のフィールドを除外したリストBを作成する(S81)。ここで、getModifiersでフィールドのModifierを検査する。なお、StaticやTransientを除く。
次に、逆シリアル化手段101は、フィールド名のリストBをアルファベット順(あるいは、シリアル化・シリアル化復元間で共通ソートアルゴリズム)でソートしたリストCを作成する(S82)。
次に、逆シリアル化手段101は、リストCの要素数と読み出したarrayコードで定義されている個数(フィールド個数)とが一致するか確認する(S83)。
リストCの要素数と読み出したarrayコードで定義されている個数(フィールド個数)とが一致する場合(S83;Yes)、リストCが空か確認し(S84)、空でなければ(S84;No)、リストCからフィールド名を1つ取り出し(S85)、フィールド名のフィールドに読み込んだ要素1個を代入する(S86)。ここで、要素がPrimitive Valueとして取得されるまで再帰的にシリアル化復元を繰り返す。また、要素がFIXEXT1(D4)の場合は指定される拡張型の型として型を指定して復元する。また、Genericsの型パラメータが指定された場合は、パラメータを適用した型として代入する。
次に、逆シリアル化手段101は、リストCが空となったら(S84;Yes)、処理を終了する。
また、リストCの要素数と読み出したarrayコードで定義されている個数(フィールド個数)とが一致しない場合(S83;No)、エラーを返す。
(実施の形態の効果)
上記した実施の形態によれば、シリアル化する際にクラスに関連付けられた情報を記録し、フィールド名を予め定めたルールで並び替えてフィールド値を記録し、フィールド名を省略してシリアル化したデータを生成し、逆シリアル化する際にリフレクションによりクラス名からフィールド名を取得して、フィールド値を元の順に並び替えて復元するようにしたため、シリアル化の対象となるオブジェクトの制限を低減することができる。また、フィールド名を記録する必要がないため、フィールド名を記録する場合に比べて、シリアル化したデータのサイズを小さくできる。
また、フィールド名を予め定めたルールで並び替えて、フィールド名を省略したため、言語依存性がなくなるとともに、フィールド値に対してナンバリングする必要がないことから保守性及び開発効率が向上するとともに、フィールド名を自由に設定できる(フィールド名を長く設定したとしてもシリアル化した結果のデータが長くならない。)。また、シリアル化の際にフィールド名をアルファベット順(あらかじめ決められた順序)で並べ替えるようにし、逆シリアル化の際にリフレクション機能でフィールド情報(名前、タイプ)を取得して、シリアライズしたデータをフィールド名でアルファベット順にならべかえたフィールドに代入するようにしたため、シリアライズされたデータとフィールド名の対応をIDL(インターフェース定義言語)を参照する必要がなく、リフレクションを行うことでIDLが不要となる。これらを総じて通信の条件や環境に柔軟に対応することができる。
[他の実施の形態]
なお、本発明は、上記実施の形態に限定されず、本発明の趣旨を逸脱しない範囲で種々な変形が可能である。
上記実施の形態では制御部10の各手段100~104の機能をプログラムで実現したが、各手段の全て又は一部をASIC等のハードウエアによって実現してもよい。また、上記実施の形態で用いたプログラムをCD‐ROM等の記録媒体に記憶して提供することもできる。また、上記実施の形態で説明した上記ステップの入れ替え、削除、追加等は本発明の要旨を変更しない範囲内で可能である。
1 :サーバ装置
2 :端末装置
10 :制御部
11 :記憶部
12 :メモリ
13 :通信部
100 :データ受信手段
101 :逆シリアル化手段
102 :オブジェクト処理手段
103 :シリアル化手段
104 :データ送信手段
110 :情報処理プログラム
111 :記録データ
112 :項目対応表
120 :オブジェクト
121 :オブジェクト

Claims (11)

  1. 情報を処理するコンピュータにおいて、
    オブジェクトのクラスに関連付けられた情報を記載するステップと、
    前記オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を削除して、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載するステップと、
    前記記載されたクラスに関連付けられた情報と、前記並べ替えられたフィールド値をシリアル化されたデータとして出力するステップとを有するシリアル化方法。
  2. 前記オブジェクトがサブクラスのインスタンスの場合、前記サブクラスが定義するフィールド名に加えてスーパークラスが定義するフィールド名を合わせたフィールド名について前記サブクラス及び前記スーパークラスに関わらず予め定めた順番に従って並べ替える請求項1に記載のシリアル化方法。
  3. 前記フィールド値を並べ替えた順に記載するステップは、前記オブジェクトのフィールドの値を配列として記載する旨が定義されている場合は、前記オブジェクトのフィールドの値を、前記並べ替えた順序に従って前記配列として記載する請求項1又は2に記載のシリアル化方法。
  4. 前記クラスに関連付けられた情報は、少なくとも前記オブジェクトのクラス名を予め定めた関数で変換したハッシュ値である請求項1から3のいずれか1項に記載のシリアル化方法。
  5. 情報を処理するコンピュータにおいて、
    オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を削除して、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載して、当該オブジェクトのクラスに関連付けられた情報とともにシリアル化されたデータからクラスに関連付けられた情報を取得するステップと、
    前記クラスのフィールド情報を取得するステップと、
    前記シリアル化されたオブジェクトのデータのフィールド値に対応する値が、前記取得したフィールド名を予め定めた順番で並べ替えたものに対応して並んでいるものとして取得して、前記取得したフィールド名とともに復元するステップと、
    前記取得されたクラスに関連付けられた情報、前記フィールド情報、前記フィールド値を復元されたオブジェクトとして出力するステップとを有する逆シリアル化方法。
  6. 前記復元するステップは、前記オブジェクトのフィールド値が配列として記載されている場合、前記シリアル化されたオブジェクトのデータのフィールド値に対応する値が、前記取得したフィールド名を予め定めた順番で並べ替えて前記配列として記載されているものとして取得して、前記取得したフィールド名とともに復元する請求項5に記載の逆シリアル化方法。
  7. コンピュータを、
    オブジェクトのクラスに関連付けられた情報を記載し、前記オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を削除して、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載し、前記記載されたクラスに関連付けられた情報と、前記並べ替えられたフィールド値をシリアル化されたデータとして出力するシリアル化手段として機能させる情報処理プログラム。
  8. コンピュータを、
    オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を削除して、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載して、当該オブジェクトのクラスに関連付けられた情報とともにシリアル化されたデータからクラスに関連付けられた情報を取得し、前記クラスのフィールド情報を取得し、前記シリアル化されたオブジェクトのデータのフィールド値に対応する値が、前記取得したフィールド名を予め定めた順番で並べ替えたものに対応して並んでいるものとして取得して、前記取得したフィールド名とともに復元し、前記取得されたクラスに関連付けられた情報、前記フィールド情報、前記フィールド値を復元されたオブジェクトとして出力する逆シリアル化手段として機能させる情報処理プログラム。
  9. オブジェクトのクラスに関連付けられた情報を記載し、前記オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を削除して、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載し、前記記載されたクラスに関連付けられた情報と、前記並べ替えられたフィールド値をシリアル化されたデータとして出力するシリアル化手段を有する情報処理装置。
  10. オブジェクトのフィールド名を予め定めた順番に従って並べ替えて、当該フィールド名を削除して、当該フィールド名に対応するフィールド値を並べ替えたフィールド名の順に記載して、当該オブジェクトのクラスに関連付けられた情報とともにシリアル化されたデータからクラスに関連付けられた情報を取得し、前記クラスのフィールド情報を取得し、前記シリアル化されたオブジェクトのデータのフィールド値に対応する値が、前記取得したフィールド名を予め定めた順番で並べ替えたものに対応して並んでいるものとして取得して、前記取得したフィールド名とともに復元し、前記取得されたクラスに関連付けられた情報、前記フィールド情報、前記フィールド値を復元されたオブジェクトとして出力する逆シリアル化手段を有する情報処理装置。
  11. 請求項9及び請求項10に記載の情報処理装置を複数通信可能に接続して構成される通信システム。
JP2021078133A 2021-04-30 2021-04-30 シリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システム Active JP7253172B2 (ja)

Priority Applications (6)

Application Number Priority Date Filing Date Title
JP2021078133A JP7253172B2 (ja) 2021-04-30 2021-04-30 シリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システム
EP22795722.2A EP4254905A4 (en) 2021-04-30 2022-04-25 SERIALIZATION METHOD, DESERIALIZATION METHOD, INFORMATION PROCESSING PROGRAM, INFORMATION PROCESSING APPARATUS AND COMMUNICATIONS SYSTEM
KR1020237018616A KR102628135B1 (ko) 2021-04-30 2022-04-25 시리얼화 방법, 역시리얼화 방법, 정보 처리 프로그램, 정보 처리 장치 및 통신 시스템
CN202280007235.6A CN116368788A (zh) 2021-04-30 2022-04-25 串行化方法、逆串行化方法、信息处理程序、信息处理装置以及通信系统
PCT/JP2022/018731 WO2022230809A1 (ja) 2021-04-30 2022-04-25 シリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システム
US17/963,194 US20230051879A1 (en) 2021-04-30 2022-10-11 Serialization method, deserialization method, information processing program, information processing apparatus, and communication system

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2021078133A JP7253172B2 (ja) 2021-04-30 2021-04-30 シリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システム

Publications (2)

Publication Number Publication Date
JP2022171464A JP2022171464A (ja) 2022-11-11
JP7253172B2 true JP7253172B2 (ja) 2023-04-06

Family

ID=83847186

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2021078133A Active JP7253172B2 (ja) 2021-04-30 2021-04-30 シリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システム

Country Status (6)

Country Link
US (1) US20230051879A1 (ja)
EP (1) EP4254905A4 (ja)
JP (1) JP7253172B2 (ja)
KR (1) KR102628135B1 (ja)
CN (1) CN116368788A (ja)
WO (1) WO2022230809A1 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US12436875B2 (en) 2023-08-16 2025-10-07 Shanghai Tosun Technology Ltd. Vehicular development and debugging system and method for configuring parameter for graphic program
US12405777B2 (en) * 2023-08-16 2025-09-02 Shanghai Tosun Technology Ltd. Method and system for configuring parameter for graphic program
CN119806486B (zh) * 2024-12-02 2025-10-24 中交武汉智行国际工程咨询有限公司 基于虚幻引擎的对象数据序列化和反序列化系统及方法

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5944781A (en) 1996-05-30 1999-08-31 Sun Microsystems, Inc. Persistent executable object system and method
US6862686B1 (en) 1999-10-29 2005-03-01 International Business Machines Corporation Method and apparatus in a data processing system for the separation of role-based permissions specification from its corresponding implementation of its semantic behavior
JP2007213551A (ja) 2005-08-24 2007-08-23 System Produce:Kk データ管理システム
JP2008203959A (ja) 2007-02-16 2008-09-04 Technical Research & Development Institute Ministry Of Defence データ転送におけるシリアライズ方法、データフォーマット及びデータ転送装置

Family Cites Families (18)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6477701B1 (en) * 1999-09-30 2002-11-05 Seiko Epson Corporation Version-adaptive serialization and deserialization of program objects in an object-oriented environment
EP1182547A1 (de) * 2000-08-24 2002-02-27 Wincor Nixdorf GmbH & Co KG Programmkopplungsmethode
US6898604B1 (en) * 2001-06-29 2005-05-24 Microsoft Corporation XML serialization and deserialization
CA2419904A1 (en) * 2003-02-26 2004-08-26 Ibm Canada Limited - Ibm Canada Limitee Version-insensitive serialization and deserialization of program objects
US7404186B2 (en) * 2003-05-28 2008-07-22 Microsoft Corporation Signature serialization
US7730041B2 (en) * 2004-08-25 2010-06-01 Microsoft Corporation Data abstraction based serialization
CN102750268A (zh) * 2012-06-19 2012-10-24 山东中创软件商用中间件股份有限公司 一种对象序列化方法、对象反序列化方法、装置及系统
CN104077335B (zh) * 2013-05-07 2017-05-03 腾讯科技(深圳)有限公司 一种结构化数据的序列化、反序列化方法、装置和系统
JP6265040B2 (ja) * 2014-05-14 2018-01-24 富士通株式会社 処理プログラム、処理システムおよび処理方法
CN105446722B (zh) * 2014-08-29 2019-04-02 优视科技有限公司 序列化方法和装置、以及反序列化方法和装置
CN104360865B (zh) * 2014-11-28 2018-05-18 中国建设银行股份有限公司 一种序列化方法、反序列化方法及相关设备
CN106777292B (zh) * 2016-12-29 2019-11-15 北京神州绿盟信息安全科技股份有限公司 一种数据序列化方法及装置
US10884719B2 (en) * 2017-10-27 2021-01-05 Synchrony Bank Dynamic model reflection
CN109299100B (zh) * 2018-10-12 2019-08-30 第四范式(北京)技术有限公司 管理内存数据及在内存中维护数据的方法和系统
US10908924B2 (en) * 2019-05-01 2021-02-02 Intuit Inc. System and methods for loading objects from hash chains
US11720559B2 (en) * 2020-06-02 2023-08-08 Salesforce.Com, Inc. Bridging textual and tabular data for cross domain text-to-query language semantic parsing with a pre-trained transformer language encoder and anchor text
CN112035831A (zh) * 2020-08-14 2020-12-04 深信服科技股份有限公司 一种数据处理方法、装置、服务器及存储介质
EP4275326B1 (en) * 2021-01-08 2025-04-16 Telefonaktiebolaget LM Ericsson (publ) Data serialization in a communication network

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5944781A (en) 1996-05-30 1999-08-31 Sun Microsystems, Inc. Persistent executable object system and method
US6862686B1 (en) 1999-10-29 2005-03-01 International Business Machines Corporation Method and apparatus in a data processing system for the separation of role-based permissions specification from its corresponding implementation of its semantic behavior
JP2007213551A (ja) 2005-08-24 2007-08-23 System Produce:Kk データ管理システム
JP2008203959A (ja) 2007-02-16 2008-09-04 Technical Research & Development Institute Ministry Of Defence データ転送におけるシリアライズ方法、データフォーマット及びデータ転送装置

Also Published As

Publication number Publication date
EP4254905A4 (en) 2024-02-14
JP2022171464A (ja) 2022-11-11
US20230051879A1 (en) 2023-02-16
EP4254905A1 (en) 2023-10-04
KR102628135B1 (ko) 2024-01-23
WO2022230809A1 (ja) 2022-11-03
CN116368788A (zh) 2023-06-30
KR20230086802A (ko) 2023-06-15

Similar Documents

Publication Publication Date Title
JP7253172B2 (ja) シリアル化方法、逆シリアル化方法、情報処理プログラム、情報処理装置及び通信システム
US8141074B2 (en) Packaging files having automatic conversion across platforms
US6862599B2 (en) Software-based methodology for the storage and retrieval of diverse information
EP3435256B1 (en) Optimal sort key compression and index rebuilding
US20230078918A1 (en) Devices and methods for efficient execution of rules using pre-compiled directed acyclic graphs
CN106570018A (zh) 序列化与反序列化的方法、装置、系统以及电子设备
CN108959626B (zh) 一种跨平台异构数据简报高效自动生成方法
CN109697278B (zh) 将根据模式以人类可读的文本格式化的数据编码为二进制
US6999966B2 (en) Content management system and methodology for implementing a complex object using nested/recursive structures
CN115705313A (zh) 一种数据处理方法、装置、设备及计算机可读存储介质
US7240074B2 (en) Storage medium having object-oriented program
EP1755050A1 (en) A data processing system and method of storing a dataset having a hierarchical data structure in a database
KR20250107136A (ko) 문서에 관련된 멀티미디어 파일을 관리하기 위한 방법 및 장치
JPH10261969A (ja) データ圧縮方法および装置
US7685582B2 (en) Looping constructs in object model software
CN111913957B (zh) 数据序列化后特征提取方法、系统及计算机可读存储介质
US20190220502A1 (en) Validation device, validation method, and computer-readable recording medium
CN114090522B (zh) 一种电子文件的标识符定义方法、装置、设备
JP2007148751A (ja) 構造化文書の符号化方法、符号化装置、符号化プログラム、復号装置及び符号化された構造化文書のデータ構造
CN115878658A (zh) 一种针对关系型数据库的大容量sql文件的导入方法
CN116627716A (zh) 数据持久化处理方法、装置、电子设备及存储介质
CN120872404A (zh) 一种应用于工程数据影响分析的数据版本管控方法
Troelsen Input, Output, and Object Serialization
CN119719055A (zh) 基于Protobuf.js生成的描述文件压缩方法、装置、设备及存储介质
CN118656533A (zh) 一种数据处理方法及装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20210521

A871 Explanation of circumstances concerning accelerated examination

Free format text: JAPANESE INTERMEDIATE CODE: A871

Effective date: 20210521

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20210824

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20211019

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20220114

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220224

A02 Decision of refusal

Free format text: JAPANESE INTERMEDIATE CODE: A02

Effective date: 20220517

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20220816

C60 Trial request (containing other claim documents, opposition documents)

Free format text: JAPANESE INTERMEDIATE CODE: C60

Effective date: 20220816

C11 Written invitation by the commissioner to file amendments

Free format text: JAPANESE INTERMEDIATE CODE: C11

Effective date: 20220830

A911 Transfer to examiner for re-examination before appeal (zenchi)

Free format text: JAPANESE INTERMEDIATE CODE: A911

Effective date: 20220905

C21 Notice of transfer of a case for reconsideration by examiners before appeal proceedings

Free format text: JAPANESE INTERMEDIATE CODE: C21

Effective date: 20220906

A912 Re-examination (zenchi) completed and case transferred to appeal board

Free format text: JAPANESE INTERMEDIATE CODE: A912

Effective date: 20221104

C211 Notice of termination of reconsideration by examiners before appeal proceedings

Free format text: JAPANESE INTERMEDIATE CODE: C211

Effective date: 20221108

C22 Notice of designation (change) of administrative judge

Free format text: JAPANESE INTERMEDIATE CODE: C22

Effective date: 20221108

C22 Notice of designation (change) of administrative judge

Free format text: JAPANESE INTERMEDIATE CODE: C22

Effective date: 20230110

C23 Notice of termination of proceedings

Free format text: JAPANESE INTERMEDIATE CODE: C23

Effective date: 20230214

C03 Trial/appeal decision taken

Free format text: JAPANESE INTERMEDIATE CODE: C03

Effective date: 20230314

C30A Notification sent

Free format text: JAPANESE INTERMEDIATE CODE: C3012

Effective date: 20230314

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20230315

R150 Certificate of patent or registration of utility model

Ref document number: 7253172

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250