首页 > 编程 > C# > 正文

protobuf对象二进制序列化存储(详解)

2020-01-24 00:45:48
字体:
来源:转载
供稿:网友

首先下载protobuf库,可以用Nuget。

demo:

using System;namespace Tools{  public class BufHelp  {    /// <summary>    /// 对象锁    /// </summary>    private readonly static Object Locker = new Object();    ///// <summary>    ///// 读写分离锁    ///// </summary>    ///// <remarks>aaaaa</remarks>    //private static ReaderWriterLockSlim rwl = new ReaderWriterLockSlim();    /// <summary>    /// 序列化-表字段业务信息    /// </summary>    public static bool ProtoBufSerialize<T>(T model, string filename) where T : class    {      try      {        string binpath = Config.KeyCenter.KeyBaseDirectory + @"Config/";        if (!System.IO.Directory.Exists(binpath))          System.IO.Directory.CreateDirectory(binpath);        lock (Locker)        {          using (var file = System.IO.File.Create(binpath + filename))          {            ProtoBuf.Serializer.Serialize<T>(file, model);            return true;          }        }      }      catch      {        return false;      }    }    public static T ProtoBufDeserialize<T>(string filename) where T : class    {      var dbpath = Config.KeyCenter.KeyBaseDirectory + @"Config/" + filename;      if (System.IO.File.Exists(dbpath))      {        lock (Locker)        {          using (var file = System.IO.File.OpenRead(dbpath))          {            var result = ProtoBuf.Serializer.Deserialize<T>(file);            return result;          }        }      }      return default(T);    }  }}/// <summary>    /// 序列化    /// </summary>    public static string Serialize<T>(T t) where T : class    {      using (MemoryStream ms = new MemoryStream())      {        ProtoBuf.Serializer.Serialize<T>(ms, t);        return Encoding.UTF8.GetString(ms.ToArray());      }    }    /// <summary>    /// 反序列化    /// </summary>    public static T DeSerialize<T>(string content) where T : class    {      using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(content)))      {        T t = ProtoBuf.Serializer.Deserialize<T>(ms);        return t;      }    }

以上这篇protobuf对象二进制序列化存储(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表