zoukankan      html  css  js  c++  java
  • 简单的对象序列化协议(伪代码)

    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
     		};
     	}
    

      

  • 相关阅读:
    Azure HPC Pack Cluster添加辅助节点
    Azure HPC Pack 辅助节点模板配置
    Azure HPC Pack配置管理系列(PART6)
    Windows HPC Pack 2012 R2配置
    Azure HPC Pack 节点提升成域控制器
    Azure HPC Pack VM 节点创建和配置
    Azure HPC Pack 部署必要条件准备
    Azure HPC Pack 基础拓扑概述
    Azure VM 性能计数器配置
    Maven私仓配置
  • 原文地址:https://www.cnblogs.com/lhp2012/p/9542430.html
Copyright © 2011-2022 走看看