目次 | 前の項目 | 次の項目 Java オブジェクト直列化仕様


6.4.1 文法規則

直列化されたストリームは、ストリーム規則を満たす任意のストリームによって表されます。

stream:
magic version contents

contents:
content
contents content

content:
object
blockdata

object:
newObject
newClass
newArray
newString
newClassDesc
prevObject
nullReference
exception
reset

newClass:
TC_CLASS classDesc newHandle

classDesc:
newClassDesc
nullReference
(ClassDesc)prevObject
         // 型 ClassDesc が要求されるオブジェクト

superClassDesc:
classDesc

newClassDesc:
TC_CLASSDESC className serialVersionUID newHandle classDescInfo

classDescInfo:
classDescFlags fields classAnnotation superClassDesc

className:
(utf)

serialVersionUID:
(long)

classDescFlags:
(byte)                                    // 終端記号および定数で定義

fields:
(short)<count> fieldDesc[count]

fieldDesc:
primitiveDesc
objectDesc

primitiveDesc:
prim_typecode fieldName

objectDesc:
obj_typecode fieldName className1

fieldName:
(utf)

className1:
(String)object                               // フィールドタイプを含む String

classAnnotation:
endBlockData
contents endBlockData
             // annotateClass で書かれた内容

prim_typecode:
`B'                                                // byte
`C'                                                // char
`D'                                                // double
`F'                                                // float
`I'                                                // integer
`J'                                                // long
`S'                                                // short
`Z'                                                // boolean

obj_typecode:
`[`                                                // 配列
`L'                                                // オブジェクト

newArray:
TC_ARRAY classDesc newHandle (int)<size> values[size]

newObject:
TC_OBJECT classDesc newHandle classdata[]      // 各クラスのデータ

classdata:
nowrclass                                     // SC_SERIALIZABLE & classDescFlag &&
                                                        // !(SC_WRITE_METHOD & classDescFlags)
wrclass objectAnnotation       // SC_SERIALIZABLE & classDescFlag &&
                                                        // SC_WRITE_METHOD & classDescFlags
externalContents
                      // SC_EXTERNALIZABLE & classDescFlag &&
                                                        // !(SC_BLOCKDATA & classDescFlags
objectAnnotation
                      // SC_EXTERNALIZABLE & classDescFlag&&
                                                        // SC_BLOCKDATA & classDescFlags

nowrclass:
values                                           // クラス記述子のためのフィールド

wrclass:
nowrclass

objectAnnotation:
endBlockData
contents endBlockData
          // PROTOCOL_VERSION_2 で writeObject または writeExternal
                                                       // によって書かれた内容

blockdata:
blockdatashort
blockdatalong

blockdatashort:
TC_BLOCKDATA (unsigned byte)<size> (byte)[size]

blockdatalong:
TC_BLOCKDATALONG (int)<size> (byte)[size]

endBlockData:
TC_ENDBLOCKDATA

externalContent:                                   // readExternal でのみ解析可能
                                                                    // プリミティブデータ
(bytes)object

externalContents:                                // PROTOCOL_VERSION_1writeExternal によって書かれた
                                                                   // externalContent
externalContent
externalContents externalContent

newString:
TC_STRING newHandle (utf)

prevObject:
TC_REFERENCE (int)handle

nullReference:
TC_NULL

exception:
TC_EXCEPTION reset (Throwable)object reset

magic:
STREAM_MAGIC

version:
STREAM_VERSION

values:                                                       // classDesc によって記述された
                                                                    // 現在のオブジェクトのサイズと型

newHandle:                                             // 直列化または直列化復元されている
                                                                    // オブジェクトに割り当てられる次の番号

reset:                                                         // 例外オブジェクトが、前に送信された
                                                                    // オブジェクトまたは例外のあとに
                                                                    // 送信されるオブジェクトと
                                                                    // オーバーラップしないように、破棄される
                                                                    // 既知のオブジェクトのセット



目次 | 前の項目 | 次の項目
Copyright © 1997-1998 Sun Microsystems, Inc. All Rights Reserved.