好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

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

首先下载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对象二进制序列化存储(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。

dy("nrwz");

查看更多关于protobuf对象二进制序列化存储(详解)的详细内容...

  阅读:41次