简单的对象序列化协议(伪代码)

var person = defineTLClass({
	name:tl("String",1),
	sex:tl("Int",2),
	time:tl("Long",3),
	time:tl("Long",10)
});


168421
1--2
2--4
3--8
4--16
5--32
6--64
7--128
8--256

最多256个属性 8位
类型  8位 (1-8基本类型,9类对象,10 repeat类型)


   属性编号  属性类型   属性数据
0x 00      FF         

 
 	属性数据
 	1. 基本类型,直接bytes
 	2. String类型,  bytes长度 + 内容(int + bytes)
 	3. Bytes类型,   bytes长度 + 内容(int + bytes)
 	4. Repeat类型,  bytes长度 + 内容(int +  bytes)
 	5. ClassObject类型,  bytes长度 + 内容(int +  bytes)
 	6. Map类型。 bytes长度 + 内容(int +  bytes)


 	Map类型:
 		Array [key value]
 		key: keyType  keyData (int + bytes)
 		value :valueType valueData(int + bytes)


 	readNextField(stream){
 		int fieldIndex = readNextBytes(1,stream).toInt32();
 		int fieldType = readNextBytes(1,stream).toInt32();
 		switch(fieldType){
 			case 1-7:
 				int bytesLength = getBasicByteSize(fieldType);
 				bytes content = readNextBytes(bytesLength);
 				return toBasicType(content,fieldType);
 			case "bytes":{
 				int bytesLength = readNextBytes(4).toInt32();
 				return readNextBytes(bytesLength).toBytes();
 			}
 			case "string":{
 				int bytesLength = readNextByte(4).toInt32();
 				return readNextBytes(bytesLength).toString("utf-8");
 			}
 			case "repeat":{
 				int bytesLength = readNextByte(4).toInt32();
 				bytes bytes_content = readNextBytes(bytesLength).toBytes();
 				int cur = 0;
 				List<Object> objectList = new Array();
 				while(cur < bytesLength){
 					cur  =  cur + ...;
 					objectList.add(readNextField(bytes_content))
 				}
 				return objectList;
 			}
 			case "classObject":{
 				int bytesLength = readNextByte(4).toInt32();
 				objrct = readNextObject(bytesLength)
 			}
 		}
 		return {
 			fieldIndex:fieldIndex,
 			fieldType:fieldType,
 			byteSize:byteSize,
 			fieldObject:ObjectContent
 		};
 	}

  

原文地址:https://www.cnblogs.com/lhp2012/p/9542430.html