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

发布时间 - 2026-01-10 23:04:06    点击率:

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


# protobuf  # 序列化  # 详解nodeJS之二进制buffer对象  # .net中如何以纯二进制的形式在内存中绘制一个对象  # 给大家  # 可以用  # 希望能  # 这篇  # 小编  # 大家多多  # readonly  # Locker  # Object  # static  # summary  # lt  # private  # gt  # ProtoBufSerialize  # bool  # string  # model  # aaaaa 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: googleplay官方入口在哪里_Google Play官方商店快速入口指南  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  5种Android数据存储方式汇总  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】  长沙做网站要多少钱,长沙国安网络怎么样?  Laravel怎么集成Log日志记录_Laravel单文件与每日日志配置及自定义通道【详解】  悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音  Laravel怎么配置S3云存储驱动_Laravel集成阿里云OSS或AWS S3存储桶【教程】  Python文本处理实践_日志清洗解析【指导】  Laravel如何处理表单验证?(Requests代码示例)  如何在阿里云服务器自主搭建网站?  Laravel Blade模板引擎语法_Laravel Blade布局继承用法  javascript中对象的定义、使用以及对象和原型链操作小结  Laravel Artisan命令怎么自定义_创建自己的Laravel命令行工具完全指南  如何在Tomcat中配置并部署网站项目?  Laravel如何生成PDF或Excel文件_Laravel文档导出工具与使用教程  Python文件操作最佳实践_稳定性说明【指导】  Laravel如何创建自定义中间件?(Middleware代码示例)  如何在阿里云虚拟主机上快速搭建个人网站?  Laravel API资源(Resource)怎么用_格式化Laravel API响应的最佳实践  深入理解Android中的xmlns:tools属性  悟空识字怎么关闭自动续费_悟空识字取消会员自动扣费步骤  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  如何快速生成ASP一键建站模板并优化安全性?  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  轻松掌握MySQL函数中的last_insert_id()  Laravel如何安装使用Debugbar工具栏_Laravel性能调试与SQL监控插件【步骤】  深圳网站制作培训,深圳哪些招聘网站比较好?  Python制作简易注册登录系统  如何构建满足综合性能需求的优质建站方案?  详解jQuery中的事件  昵图网官方站入口 昵图网素材图库官网入口  Laravel如何使用Blade组件和插槽?(Component代码示例)  高端网站建设与定制开发一站式解决方案 中企动力  如何快速搭建高效香港服务器网站?  C++用Dijkstra(迪杰斯特拉)算法求最短路径  佛山网站制作系统,佛山企业变更地址网上办理步骤?  如何快速生成凡客建站的专业级图册?  JavaScript如何操作视频_媒体API怎么控制播放  如何在自有机房高效搭建专业网站?  php8.4header发送头信息失败怎么办_php8.4header函数问题解决【解答】  如何快速查询网址的建站时间与历史轨迹?  Laravel Vite是做什么的_Laravel前端资源打包工具Vite配置与使用  Laravel路由怎么定义_Laravel核心路由系统完全入门指南  Laravel如何配置中间件Middleware_Laravel自定义中间件拦截请求与权限校验【步骤】  jquery插件bootstrapValidator表单验证详解  ,网页ppt怎么弄成自己的ppt?  HTML5空格和nbsp有啥关系_nbsp的作用及使用场景【说明】  非常酷的网站设计制作软件,酷培ai教育官方网站?