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

      

  • 相关阅读:
    layDate关闭方法
    iOS Crash日志符号化
    图像压缩工具ImageOptim介绍
    UITextField设置光标位置
    Detect backspace in UITextField
    scrollsToTop小结
    查看UIWindows的视图层次
    弹出框适配总结
    关于IOS获取keyBoard键盘是否弹出
    UItableViewCell滑动删除时,调整cell子视图的位置大小
  • 原文地址:https://www.cnblogs.com/lhp2012/p/9542430.html
Copyright © 2011-2022 走看看