Unity手遊之路<一>C#版本Protobuf

來源:互聯網
上載者:User

標籤:

向原創致敬http://blog.csdn.net/janeky/article/details/17104877

 

一個遊戲包含了各種資料,包括本機資料和與服務端通訊的資料。今天我們來談談如何儲存資料,以及用戶端和服務端的編碼方式。根據以前的經驗,我們可以用字串,XML,json...甚至可以直接儲存二進位。各種方式都有各自的優劣,有些效能比較好,但是實現方式比較麻煩。有些資料冗餘太多。

  • 簡介

今天我們來學習一種廣泛使用的資料格式:Protobuf。簡單來說,它就是一種二進位格式,是google發起的,目前廣泛應用在各種開發語言中。具體的介紹可以參見:https://code.google.com/p/protobuf/ 。我們之所以選擇protobuf,是基於它的高效,資料冗餘少,編程簡單等特性。關於C#的protobuf實現,網上有好幾個版本,公認比較好的是Protobuf-net。

  • 執行個體

先來看一個最簡單的例子:把一個類用Protobuf格式序列化到一個二進位檔案。再讀取位元據,還原序列化出對象資料。

從網上參考了一個例子 http://blog.csdn.net/ddxkjddx/article/details/7239798

//----------------實體類----------------------

 

[csharp] view plaincopy
  1. using UnityEngine;  
  2. using System.Collections;  
  3. using ProtoBuf;  
  4. using System;  
  5. using System.Collections.Generic;  
  6.   
  7.   
  8. [ProtoContract]  
  9. public class Test {  
  10.   
  11.   
  12.     [ProtoMember(1)]  
  13.     public int Id  
  14.     {  
  15.         get;  
  16.         set;  
  17.     }  
  18.   
  19.   
  20.     [ProtoMember(2)]  
  21.     public List<String> data  
  22.     {  
  23.         get;  
  24.         set;  
  25.     }  
  26.   
  27.   
  28.     public override string ToString()  
  29.     {  
  30.         String str = Id+":";  
  31.         foreach (String d in data)  
  32.         {  
  33.             str += d + ",";  
  34.         }  
  35.         return str;  
  36.     }  
  37.       
  38. }  

 

//-----------測試類別---------------------------

[csharp] view plaincopy
    1. using UnityEngine;  
    2. using System.Collections;  
    3. using System.Collections.Generic;  
    4. using System.IO;  
    5. using ProtoBuf;  
    6. using System;  
    7.   
    8.   
    9. public class ProtobufNet : MonoBehaviour {  
    10.   
    11.   
    12.     private const String PATH = "c://data.bin";  
    13.   
    14.   
    15.     void Start () {  
    16.         //產生資料  
    17.         List<Test> testData = new List<Test>();  
    18.         for (int i = 0; i < 100; i++)  
    19.         {  
    20.             testData.Add(new Test() { Id = i, data = new List<string>(new string[]{"1","2","3"}) });  
    21.         }  
    22.         //將資料序列化後存入本地檔案  
    23.         using(Stream file = File.Create(PATH))  
    24.         {  
    25.             Serializer.Serialize<List<Test>>(file, testData);  
    26.             file.Close();  
    27.         }  
    28.         //將資料從檔案中讀取出來,還原序列化  
    29.         List<Test> fileData;  
    30.         using (Stream file = File.OpenRead(PATH))  
    31.         {  
    32.             fileData = Serializer.Deserialize<List<Test>>(file);  
    33.         }  
    34.         //列印資料  
    35.         foreach (Test data in fileData)  
    36.         {  
    37.            Debug.Log(data);  
    38.         }  
    39.     }  
    40.       
    41. }  

Unity手遊之路<一>C#版本Protobuf

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.