CURL.IO.SERIALIZE (パッケージ)

値をバイトストリームに変換し、元に戻すことができます。

説明

シリアル化とは、値を SerializeOutputStream に書き込んでバイト ストリームに変換したり、値を SerializeInputStream から読み取ってバイトストリームから再生成したりするプロセスのことです。基礎となるバイト ストリームは、配列、ファイル、ソケットなどに含めることができます。
シリアル化可能な値は多数あります。たとえば、ほとんどのプリミティブ型 (uint8、int8、uint16、int16、int、int64、float、double、bool、char8、char16、char)、数量型、列挙型、null 型、ほとんどのプロシージャ、文字列、URL、パッケージ、ほとんどの Type、すべての serializable クラス (DateTimeZone、DateTimeData、DateTime、Arguments、FastArray-of、Array-of、HashTable-of、および Set-of を含む) などです。
クラスは serializable 形容詞を使用して宣言できます。クラス インスタンスのシリアル化とシリアル化解除を有効にするには、それぞれ object-serialize メソッドと object-deserialize コンストラクタを使用します。
object-serialize メソッドでは、まず SerializeOutputStream.write-class-version を呼び出す必要があります。通常は引数にゼロ (0) を指定します。次に、シリアル化可能な各スーパークラスに対して super.object-serialize を呼び出します。最後に、シリアル化された状態を (通常は各フィールドに SerializeOutputStream.write-one を使用して) 書き込みます。
object-deserialize コンストラクタでは、まず SerializeInputStream.verify-class-version を呼び出す必要があります。通常は引数にゼロ (0) を指定します。すでにシリアル化されているデータと互換性のない変更がクラスに対して行われ、その変更を処理する必要がある場合は、代わりに SerializeInputStream.read-class-version を使用できます。次に、シリアル化可能な各スーパークラスに対して construct-super.object-deserialize を呼び出します。最後に、シリアル化された状態を読み取ります。通常は deserialize マクロを使用して各フィールドを読み取ります。
serializable 形容詞を使用してクラスを宣言すると、必要に応じて適切な object-serialize メソッドと object-deserialize コンストラクタが自動的に生成されます。このとき、シリアル化可能なスーパークラスと一時的でないフィールドが考慮されます。
たとえば、次のように宣言します。
{define-class public serializable Class
  {inherits ClassA, ClassB, ClassC}

  field a:int
  field transient b:#String
  field c:#DateTime
}
ClassA と ClassC がシリアル化可能な場合は、次のコンストラクタとメソッドが生成されます。
{constructor public {object-deserialize in:SerializeInputStream}
    {in.verify-class-version 0}
    {construct-super.ClassA.object-deserialize in}
    {construct-super.ClassB.default}
    {construct-super.ClassC.object-deserialize in}
    set self.a = {deserialize in, int}
    set self.c = {deserialize in, #DateTime}
}
{method public open {object-serialize out:SerializeOutputStream}:void
    {out.write-class-version 0}
    {super.ClassA.object-serialize out}
    {super.ClassC.object-serialize out}
    {out.write-one self.a}
    {out.write-one self.c}
}
オブジェクトをシリアル化してからシリアル化を解除しても、ポインタの等価性は保持されます。
パッケージ メンバ:
SerializeCode
SerializeException
SerializeInputStream
SerializeOutputStream
SerializeProtocol
standard-serialization-values