* 按照顺序写入和读出,不关心原来的变量名的,不记录写的顺序。 * 存储基本大端字节序存储。 * 二进制格式: * 对于基本和内置组合类型: 数据的长度是固定的。 * 类型头 数据部分 * 00 __data__ * 类型头的定义见type.d 文件 * Struct 组合类型: * 类型头 数据部分 结束标志(Types.End) * 0x0F __data__ 0x00 * 结构提在写入的时候是每个成员都按照顺序写入,元素是结构提也是嵌套写入,数组一样。 * Array 数组类型: * 类型头 元素的类型标志 元素的个数(4Byte) 数据部分 结束标志(Types.End) * 0x10 00 00 00 00 00 __data__ 0x00 * 如果数组成员是结构体或者数组,记录的也只是Type.Struct和Types.Array, 其__data__部分也是和单独写一样的遵照标志写的是全部的和单独一样, * 对于结构体不关系结构体的结构信息,根据类型头和结束标志区分。数组一样,不关系数组的类型长度,只根据开始和结束标志区分。 * 对于基本类型和内置组合类型,数据部分和单独写不一样的,省略其类型信息,类型信息根据数组的“元素的类型标志”获取的,即认为每个元素类型是一致的,元素自己的长度是固定的。 * * 例子: * 对于TAT 结构的二进制后的数据: * 15, // TAT 开始的标志, 0x0F * * 15 // TAT.ta第一个元素ta的开始标志 TA 类型: 0x0F * 13, 0, 1, 1, 1, // TAT.TA.de ,Date类型:0x0D(13), 数据4位 * 16 // TAT.TA.data 数组类型,尅是标志0X10(16) * 2 // TAT.TA.data 的元素类型: ubyte (0x02) * 0, 0, 0, 5, //AT.TA.data 的元素个数: 5 个 * 0, 1, 3, 4, 5, //AT.TA.data data 数据不部分 * 00 // TAT.TA.data 的结束标志位 * 16 //TAT.TA.str 数组开始类型头 Note: string 不可变的 char数组 * 1 // TAT.TA.str 元素类型: char * 0, 0, 0, 11, // TAT.TA.str 元素个数 * 104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100 // TAT.TA.str 数据部分 * 0 // TAT.TA.str 结束标志 * 11, 64, 41, 40, 245, 194, 143, 92, 41, //TAT.TA.db double数据类型 0x0B(11),后面8位为数据部分 * 8, 0, 0, 0, 0, 0, 0, 3, 129, //TAT.TA.lo long类型 0x08(8),后面8位为数据部分 * 3, 0, // TAT.TA.bl bool类型 0x03(3) , 0 是 flase * 7, 0, 0, 0, 90,// TAT.TA.ui uint类型 0x07(7) , 剩下的是数据部分 * 15, // TAT.TA.ta 结构体开始标志位 * 10, 62, 131, 18, 111, // TAT.TA.TT.ft float类型0x0A(10),4个字节长度 * 14, 7, 223, 2, 15, 10, 25, 30, // TAT.TA.TT.dt DateTime类型0x0E(14),7个字节长度 * 0, // TAT.TA.ta 结构体结束标志位 * 16 // TAT.TA.iarry 数组开始标志位 * 6 // TAT.TA.iarry 数组的元素类型 int : 0x06(6) * 0, 0, 0, 10, // TAT.TA.iarry 数据长度 * 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 9,// TAT.TA.iarry 数据部分 * 0 //TAT.TA.iarry 结束标志 * 0// TAT.ta 结构体结束标志 * * 16// TAT.tt 数组的开始标志 * 15 // TAT.tt 数组元素类型 * 0, 0, 0, 3, TAT.tt 数组元素长度 * 15 // TAT.tt[0] 开始标志 * 10, 62, 131, 18, 111, // TAT.tt[0].ft * 14, 7, 223, 2, 15, 10, 25, 30, // TAT.tt[0].dt * 00 // TAT.tt[0] 开结束标志 * 15, 10, 63, 160, 196, 156, 14, 7, 224, 2, 15, 10, 25, 30, 0, // TAT.tt[1] * 15, 10, 64, 16, 98, 78, 14, 7, 225, 2, 15, 10, 25, 30, 0, // TAT.tt[2] * 0 // TAT.tt 数组的结束标志 * * 16, // TAT.ttt 数组的开始标志 * 16 // TAT.ttt 数组的元素类型, 还是数组,数组嵌套 * 0, 0, 0, 2, //TAT.ttt 数组长度 * 16 //TAT.ttt[0] 开始标志 * 15 // TAT.ttt[0] 的元素类型, 结构体 * 0, 0, 0, 3 // TAT.ttt[0] 的元素个数 * 15, 10, 62, 131, 18, 111, 14, 7, 223, 2, 15, 10, 25, 30, 0, //TAT.ttt[0][0] 结构提类型 * 15, 10, 62, 182, 69, 162, 14, 7, 224, 2, 15, 10, 25, 30, 0, //TAT.ttt[0][1] * 15, 10, 62, 233, 120, 213, 14, 7, 225, 2, 15, 10, 25, 30, 0, //TAT.ttt[0][2] * 0 //TAT.ttt[0] 结束标志 * 16 //TAT.ttt[1] 开始标志 * 15 TAT.ttt[1] 的元素类型, 结构体 * 0, 0, 0, 3 // TAT.ttt[1] 的元素个数 * 15, 10, 63, 160, 196, 156, 14, 7, 226, 2, 15, 10, 25, 30, 0, //TAT.ttt[1][0] * 15, 10, 63, 173, 145, 104, 14, 7, 227, 2, 15, 10, 25, 30, 0, //TAT.ttt[1][1] * 15, 10, 64, 22, 200, 180, 14, 7, 228, 10, 2, 10, 25, 30, 0, //TAT.ttt[1][2] * 0 //TAT.ttt[1] 结束标志 * 0// TAT.ttt 数组的结束标志 * * 0 // TAT 结束标志 *
See Implementation
* 按照顺序写入和读出,不关心原来的变量名的,不记录写的顺序。 * 存储基本大端字节序存储。 * 二进制格式: * 对于基本和内置组合类型: 数据的长度是固定的。 * 类型头 数据部分 * 00 __data__ * 类型头的定义见type.d 文件 * Struct 组合类型: * 类型头 数据部分 结束标志(Types.End) * 0x0F __data__ 0x00 * 结构提在写入的时候是每个成员都按照顺序写入,元素是结构提也是嵌套写入,数组一样。 * Array 数组类型: * 类型头 元素的类型标志 元素的个数(4Byte) 数据部分 结束标志(Types.End) * 0x10 00 00 00 00 00 __data__ 0x00 * 如果数组成员是结构体或者数组,记录的也只是Type.Struct和Types.Array, 其__data__部分也是和单独写一样的遵照标志写的是全部的和单独一样, * 对于结构体不关系结构体的结构信息,根据类型头和结束标志区分。数组一样,不关系数组的类型长度,只根据开始和结束标志区分。 * 对于基本类型和内置组合类型,数据部分和单独写不一样的,省略其类型信息,类型信息根据数组的“元素的类型标志”获取的,即认为每个元素类型是一致的,元素自己的长度是固定的。 * * 例子: * 对于TAT 结构的二进制后的数据: * 15, // TAT 开始的标志, 0x0F * * 15 // TAT.ta第一个元素ta的开始标志 TA 类型: 0x0F * 13, 0, 1, 1, 1, // TAT.TA.de ,Date类型:0x0D(13), 数据4位 * 16 // TAT.TA.data 数组类型,尅是标志0X10(16) * 2 // TAT.TA.data 的元素类型: ubyte (0x02) * 0, 0, 0, 5, //AT.TA.data 的元素个数: 5 个 * 0, 1, 3, 4, 5, //AT.TA.data data 数据不部分 * 00 // TAT.TA.data 的结束标志位 * 16 //TAT.TA.str 数组开始类型头 Note: string 不可变的 char数组 * 1 // TAT.TA.str 元素类型: char * 0, 0, 0, 11, // TAT.TA.str 元素个数 * 104, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100 // TAT.TA.str 数据部分 * 0 // TAT.TA.str 结束标志 * 11, 64, 41, 40, 245, 194, 143, 92, 41, //TAT.TA.db double数据类型 0x0B(11),后面8位为数据部分 * 8, 0, 0, 0, 0, 0, 0, 3, 129, //TAT.TA.lo long类型 0x08(8),后面8位为数据部分 * 3, 0, // TAT.TA.bl bool类型 0x03(3) , 0 是 flase * 7, 0, 0, 0, 90,// TAT.TA.ui uint类型 0x07(7) , 剩下的是数据部分 * 15, // TAT.TA.ta 结构体开始标志位 * 10, 62, 131, 18, 111, // TAT.TA.TT.ft float类型0x0A(10),4个字节长度 * 14, 7, 223, 2, 15, 10, 25, 30, // TAT.TA.TT.dt DateTime类型0x0E(14),7个字节长度 * 0, // TAT.TA.ta 结构体结束标志位 * 16 // TAT.TA.iarry 数组开始标志位 * 6 // TAT.TA.iarry 数组的元素类型 int : 0x06(6) * 0, 0, 0, 10, // TAT.TA.iarry 数据长度 * 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 3, 0, 0, 0, 4, 0, 0, 0, 5, 0, 0, 0, 6, 0, 0, 0, 7, 0, 0, 0, 8, 0, 0, 0, 9,// TAT.TA.iarry 数据部分 * 0 //TAT.TA.iarry 结束标志 * 0// TAT.ta 结构体结束标志 * * 16// TAT.tt 数组的开始标志 * 15 // TAT.tt 数组元素类型 * 0, 0, 0, 3, TAT.tt 数组元素长度 * 15 // TAT.tt[0] 开始标志 * 10, 62, 131, 18, 111, // TAT.tt[0].ft * 14, 7, 223, 2, 15, 10, 25, 30, // TAT.tt[0].dt * 00 // TAT.tt[0] 开结束标志 * 15, 10, 63, 160, 196, 156, 14, 7, 224, 2, 15, 10, 25, 30, 0, // TAT.tt[1] * 15, 10, 64, 16, 98, 78, 14, 7, 225, 2, 15, 10, 25, 30, 0, // TAT.tt[2] * 0 // TAT.tt 数组的结束标志 * * 16, // TAT.ttt 数组的开始标志 * 16 // TAT.ttt 数组的元素类型, 还是数组,数组嵌套 * 0, 0, 0, 2, //TAT.ttt 数组长度 * 16 //TAT.ttt[0] 开始标志 * 15 // TAT.ttt[0] 的元素类型, 结构体 * 0, 0, 0, 3 // TAT.ttt[0] 的元素个数 * 15, 10, 62, 131, 18, 111, 14, 7, 223, 2, 15, 10, 25, 30, 0, //TAT.ttt[0][0] 结构提类型 * 15, 10, 62, 182, 69, 162, 14, 7, 224, 2, 15, 10, 25, 30, 0, //TAT.ttt[0][1] * 15, 10, 62, 233, 120, 213, 14, 7, 225, 2, 15, 10, 25, 30, 0, //TAT.ttt[0][2] * 0 //TAT.ttt[0] 结束标志 * 16 //TAT.ttt[1] 开始标志 * 15 TAT.ttt[1] 的元素类型, 结构体 * 0, 0, 0, 3 // TAT.ttt[1] 的元素个数 * 15, 10, 63, 160, 196, 156, 14, 7, 226, 2, 15, 10, 25, 30, 0, //TAT.ttt[1][0] * 15, 10, 63, 173, 145, 104, 14, 7, 227, 2, 15, 10, 25, 30, 0, //TAT.ttt[1][1] * 15, 10, 64, 22, 200, 180, 14, 7, 228, 10, 2, 10, 25, 30, 0, //TAT.ttt[1][2] * 0 //TAT.ttt[1] 结束标志 * 0// TAT.ttt 数组的结束标志 * * 0 // TAT 结束标志 *