【protobuf】 3.使用protobuf-csharp-port进行序列化和反序列化

原创 2015年07月07日 15:27:30

使用protobuf-csharp-port进行序列化和反序列化,以AddressBook为例

有关如何获得AddressBook,如何构建ProtoBuf环境,请看protobuf 2.在Unity的C#中引用


一、序列化

1.构建一个AddressBook对象

AddressBook.Builder addressBookBuilder = AddressBook.CreateBuilder();
Person.Builder person = Person.CreateBuilder();
person.Id = 1;
person.Name = "Test";
person.Email = "test@qq.com";
addressBookBuilder.AddPerson(person);
AddressBook addressBook = addressBookBuilder.Build();
2.调用WriteTo进行序列化

MemoryStream stream = new MemoryStream();
addressBook.WriteTo(stream);
byte[] buffer = stream.ToArray();

3.提取方法,传入ProtoBuf对象(即AddressBook对象)及其泛型,得到byte数组

public static byte[] Serialize<TMessage, TBuilder>(TMessage protoBufObj)
	where TMessage : GeneratedMessage<TMessage, TBuilder>
	where TBuilder : GeneratedBuilder<TMessage, TBuilder>, new()
{
	MemoryStream stream = new MemoryStream();
	protoBufObj.WriteTo(stream);
	return stream.ToArray();
}


调用方法

byte[] buffer = Serialize<AddressBook, AddressBook.Builder>(addressBook);

二、反序列化

1.通过Builder的MergeFrom方法进行反序列化

AddressBook.Builder builder = new AddressBook.Builder();
builder.MergeFrom(buffer);
AddressBook result = builder.Build();
2.提取方法,以序列化后的byte数组为参数,获得ProtoBuf对象
public static TMessage Deserialize<TMessage, TBuilder>(byte[] buffer)
	where TMessage : GeneratedMessage<TMessage, TBuilder>
	where TBuilder : GeneratedBuilder<TMessage, TBuilder>, new()
{
	TBuilder builder = new TBuilder();
	builder.MergeFrom(buffer);
	return builder.Build() as TMessage;
}
调用方法

AddressBook result = Deserialize<AddressBook, AddressBook.Builder>(buffer);

版权声明:本文为博主原创文章,未经博主允许不得转载。

C#下使用protobuf(Google Protocol Buffers)

Protobuf是google提供的一个开源序列化框架,类似于XML,JSON这样的数据表示语言,其最大的特点是基于二进制,因此比传统的XML表示高效短小得多。除了比Json、XML有速度上的优势和使...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

protobuf V3 C# 中文机翻教程。

protocol buffer:C# 本教程提供了一个基本的C#程序员的介绍与PB的工作,使用proto3的PB语言的版本。通过创建一个简单的示例应用程序走,就说明你如何 定义一个...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

性能最好的序列化反序列化,Protobuf的用法(maven项目)

首先要在pom.xml里添加Protobuf的jar包 com.dyuproject.protostuff protostuff-core ...

Google Protobuf 3版本介绍

转:http://www.cppblog.com/sunicdavy/archive/2016/01/25/212739.html Proto3的语法变化 语法标记 这个版本的pro...

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

C# 使用 protobuf 进行对象序列化与反序列化

本文永久地址:http://www.omuying.com/article/148.aspx,【文章转载请注明出处!】 protobuf 是 google的一个开源项目,可用于以下两种用途:(1...

C#使用Protocol Buffer(ProtoBuf)进行对象的序列化与反序列化

Protocol Buffer是Google开发的数据格式,也是除了XML和JSON之外人气第三高的^^需要的朋友可以参考下 首先来说一下本文中例子所要实现的功能: 基于Proto...

unity3d中ProtoBuf的序列化和反序列化c#

using System; using System.IO; using ProtoBuf; namespace SensorServerPro { class Common { ...
  • zscjob
  • zscjob
  • 2015年10月28日 20:35
  • 1289
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【protobuf】 3.使用protobuf-csharp-port进行序列化和反序列化
举报原因:
原因补充:

(最多只允许输入30个字)