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

      

  • 相关阅读:
    当前毫秒时间戳
    生成随机指定长度的字符串
    symfony框架学习
    Git 学习一
    jmeter逻辑控制器
    jmeter执行顺序及作用域规则
    jmeter常用测试元件
    windows环境下jmeter生成测试报告
    jmeter参数化
    对网页进行截图(selenium)
  • 原文地址:https://www.cnblogs.com/lhp2012/p/9542430.html
Copyright © 2011-2022 走看看