5.3 类型映射

正确处理类型是数据库,服务器,客户端,正常工作的关键


  • 简单类型

    Xml描述 Java C# C++ Javascript Lua
    boolean boolean bool bool Boolean Boolean
    byte byte byte int8_t Number Number
    short short short int16_t Number Number
    int int int int32_t Number Number
    long long long int64_t Number Number
    float float float float Number Number
    double double double double Number Number
    string string string std::string String String
    binary Octets Octets Octets Array(Number) Table(Number)
    any:[type] type 不支持 不支持 不支持 不支持

    除了c#的byte为无符号类型之外,其它的所有数值类型均为有符号类型,可能导致处理上的差异,需要特别小心。

    使用脚本客户端的情况下需要小心使用long类型, 脚本客户端的Number在内部表示为double, long的精度达不到64位,根据IEEE754标准, javascript能提供52位有效位, 不知道为什么Lua5.1更少, 基于这样的现实考虑, 在脚本数据编码时作了一个特殊处理, 绝对值小于等于0x3FFFFFFFFFFFL的long按照数值编码, 否则编码为串, 解码之后至少能确保表达的一致性。

    服务器的字符串均以UTF8格式编码,客户端在必要情况下需要自己转换。没有编码解码库的情况下,可以考虑使用binary替换,自己解释。

    any类型,不能直接或间接地被任何bean,protocol,rpc,view引用。


  • 容器类型

    Xml描述 Java C# C++ Javascript Lua
    List LinkedList LinkedList std::list Array Table
    Vector ArrayList List std::vector Array Table
    Set HashSet HashSet std::unordered_set Array Table
    Map HashMap Dictionary std::unordered_map Map Table

    类型化语言中所有容器均使用泛型类型。

    Javascript规范本身不包含Map,各种浏览器上的javascript环境都有各自的实现版本;OracleJDK自带的javascript引擎实现不包含Map,使用limax内置的简单实现——map.js。


  • 构造类型

    XML description Java C# C++ Javascript Lua
    Bean Class Class class Map Table
    Cbean Class Class class Map Table
    Xbean Class Class class Map Table

    类型化语言中各种bean都定义成类,另外protocol,rpc,view,control,引用部分xbean字段的bind,均生成类代码。

    允许的引用关系的粗略描述(直接或者通过容器间接引用):


    bean := bean* | cbean* | xbean*                      
    

    bean不允许最终引用到Any类型上。


    cbean := cbean*
    xbean := cbean* | xbean*                      
    

    脚本语言中,没有类的概念,运行过程中,对象数据直接生成到以字段名为key的关联容器中。


上一页 下一页