unity中ProtoBuffer的使用

一、 数据转换

1.1. ProtoBuffer

proto: n. 原型;样机;典型
buffer : n. [计] 缓冲区;缓冲器,[车辆] 减震器
1.1.1. 简介
Protocol Buffers 是一种轻便高效的结构化数据存储格式,可以用于结构化数据串行化,或者说序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。PB 是 跨平台的;
数据 存储 :
JSON , XML ,DB ,TXT , Playerperf
Excel - txt .已经逐渐被替代
Protobuffer : 简称pb,这是一个 高效 存储格式。可以将Class直接转换为二进制流,且压缩率非常的高。以下是对比的测试:
https://www.oschina.net/translate/choose-protocol-buffers 对比
http://www.cnblogs.com/shrimps/archive/2008/11/06/1327988.html
json与ProtoBuffer对比:http://cxshun.iteye.com/blog/1974498

test.proto 只有一个 。

格式:

http://www.cnblogs.com/stephen-liu74/archive/2013/01/02/2841485.html
1.2. 使用
一般都是服务器 程序定义的,服务器端提供。
用 不同平台 生成 不同的 对应class :

Protogen 地址 : 需要自己编译,编译出来exe文件。即可使用
https://github.com/mgravell/protobuf-net/tree/master/src/protogen

1.2.1. Protogen.exe 生成解析文件
1,建立一个 bat
2, .bat 中 输入
protogen -i:test.proto -o:testTwo.cs

protogen -i:Test1.proto -i:Test2.proto -i:Test3.proto -o:Output.cs -ns:com.fbmly.model
-i 是输入文件,可以有多个
-o 输出的cs文件, 只能有一个..如果-i有多个 会将所有的代码生成到这一个cs文件当中
-ns 命名空间 最好使用,如果不使用每次生成的默认命名空间是proto的文件名。
Protobuffer .cs
1.2.2. 在工程中使用解析文件
1. 将 protobuffer-net 拖入工程;一下时下载地址:
https://github.com/mgravell/protobuf-net/tree/master/src
2. 将 smcs 拖入工程
smcs.rsp =>–unsafe
3. 重启 Unity3d
4. 修改api兼容标准:

  1. 将生成的 protobbuffer.cs 托入工程 。
    1.2.3. 代码实现
    首先引入命名空间,即在生产解析文件时定义的名称空间
    //convert the class into an byte array
    public static byte[] Serialize(IExtensible msg)
    {
        byte[] result;
        using (var stream = new MemoryStream())
        {
            Serializer.Serialize(stream, msg);
            result = stream.ToArray();
        }
        return result;
    }

    //convert an byte array into class
    public static IExtensible Deserialize(byte[] message)
    {
        IExtensible result;
        using (var stream = new MemoryStream(message))
        {
            result = Serializer.Deserialize(stream);
        }
        return result;
    }

通过调用以上两种方法,来实现字节流与类之间的转换

你可能感兴趣的:(Unity)