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

      

  • 相关阅读:
    SqlServer触发器的创建与使用
    SqlServer存储过程的创建与使用
    SqlServer视图的创建与使用
    U盘重装系统:手把手教你怎么使用U盘重装系统、清除登录密码
    附034.Kubernetes_v1.21.0高可用部署架构二
    附032.Kubernetes实现蓝绿发布
    CKS考试心得分享
    001.IT运维面试问题-Linux基础
    附031.Kubernetes_v1.20.4高可用部署架构二
    深入Netty逻辑架构,从Reactor线程模型开始
  • 原文地址:https://www.cnblogs.com/lhp2012/p/9542430.html
Copyright © 2011-2022 走看看