先进网站建设有哪些,dw6做网站,海外广告推广,网站建设打造protobuf —— 认识和安装 什么是序列化和反序列化有哪些常见的什么是序列化和反序列化工具Protobuf安装安装依赖开始安装 连接动态库一些遗留问题 我们今天来看一个序列化和反序列化的工具#xff1a;protobuf。
什么是序列化和反序列化
序列化#xff08;Serializationprotobuf。
什么是序列化和反序列化
序列化Serialization和反序列化Deserialization是计算机科学中用于处理对象状态转换的重要概念主要涉及数据的存储和传输。 序列化Serialization 是将数据结构或对象的状态信息转换成可以存储或传输的格式的过程。这个过程通常涉及将复杂的对象转换成一个格式化后的字节流该字节流可以被写入文件、通过网络发送或存储在数据库中。序列化的目的之一是为了在需要时能够将对象的状态完全恢复即使是在不同的时间或不同的环境中。序列化不包括对象的方法只是其数据成员属性。 例如当你需要在网络上传输一个对象时必须将其转换成可以穿越网络的数据格式如JSON、XML或二进制流这就是序列化过程。 反序列化Deserialization 则是序列化的逆过程即将之前序列化得到的字节流或数据格式重新转换回原来的对象或数据结构。在接收端通过反序列化可以从接收到的数据中重新构建出与原来完全相同的对象实例这样就可以在接收方继续使用这个对象了。 例如当一个序列化的对象数据通过网络到达另一台计算机时这台计算机上的程序会通过反序列化过程读取数据并重新构建出原始对象使得程序能够处理这个对象就像它最初在发送端一样。
序列化和反序列化广泛应用于多种场景包括但不限于 网络通信如RPC、Web服务数据持久化保存对象到文件或数据库分布式系统间的数据交换对象的深拷贝或持久化存储异步编程和进程间通信 举个不太恰当的例子 想象你正在经营一家蛋糕店每天需要制作各种美味的蛋糕并送到客户手中。在这个场景中蛋糕可以类比为程序中的复杂对象它包含了多层蛋糕体、奶油、水果等各种组成部分就像是对象的多个属性和方法。 序列化就像是将蛋糕打包发货的过程 假设你接到一个远距离的订单需要将一个定制的五层水果蛋糕送到客户那里。由于蛋糕不能直接邮寄你得把它拆解成可以安全运输的部分。你把每一层蛋糕单独包装奶油和水果也分开装好并附上一份详细的组装说明书这说明书可以类比为序列化时的格式规范比如JSON或XML。这个过程就相当于序列化把蛋糕对象的状态转换成可以传输存储的形式。 反序列化则是客户收到蛋糕后的组装过程当蛋糕送达客户手中他们根据说明书将蛋糕体、奶油和水果一一组合起来最终还原成你店里展示的那种精美蛋糕。这个根据说明书重新构建蛋糕的过程就相当于反序列化即从传输格式字节流或特定格式的数据中恢复出原本的蛋糕对象。 通过这个例子序列化就像是将蛋糕这种复杂的对象拆分成易于传输的组件并附上组装指南而反序列化则是按照指南将这些组件重新组合成完整的蛋糕保证在不同地点比如厨房到客户家中都能享受到同样的产品体验。
有哪些常见的什么是序列化和反序列化工具
序列化和反序列化是编程中常见的需求尤其在处理数据存储、网络通信和分布式系统中。下面是一些常见的序列化和反序列化工具它们各有特点适用于不同的应用场景 JSON (JavaScript Object Notation): 工具/库Jackson, Gson, Moshi, Fastjson等。特点人可读性强易于理解跨语言支持广泛适合于Web服务和轻量级数据交换。 XML (eXtensible Markup Language): 工具/库JAXB, DOM, SAX, StAX等。特点结构化、自描述性强标准成熟但相比JSON更冗长处理效率较低。 Protocol Buffers (protobuf): 工具/库Google的protobuf库。特点高效、紧凑的二进制格式支持跨语言需先定义.proto文件适用于高性能、高负载的场景。 Apache Avro: 特点提供了一套数据序列化的格式支持动态模式具有良好的跨语言兼容性常用于Hadoop生态系统中。 MessagePack: 特点高效的二进制格式类似于JSON但更紧凑支持多种语言适用于对性能要求较高的场景。 Thrift: 工具/库Apache Thrift。特点跨语言的服务开发框架包括序列化协议支持多种数据类型和传输协议适合构建分布式服务。 YAML (YAML Aint Markup Language): 工具/库SnakeYAML等。特点易于阅读的结构化数据格式常用于配置文件虽然不如JSON普及但在某些领域如Kubernetes配置非常流行。 Chronicle Wire: 特点高性能序列化框架特别针对Java简化了结构并采用树状结构提高性能适用于金融、交易等高性能需求。 Kryo: 特点Java库提供了快速且高效的对象图形序列化适用于Java对象的序列化尤其是游戏开发和高性能计算。 CBOR (Concise Binary Object Representation): 特点类似于JSON但更紧凑的二进制格式适用于资源受限的环境或需要高效数据交换的场景。
选择哪种序列化工具取决于具体需求如性能要求、数据交换的双方是否需要跨语言支持、是否需要高度压缩等。每种工具都有其优势和局限性合理选择可以极大提升系统的效率和可维护性。
Protobuf安装
这里讲一下Protobuf在Linux下的安装
首先获取源码git拉或者windows上下好了传给Linux也行
这里给出github的网址 https://github.com/protocolbuffers/protobuf/releases?page5 找到这个版本 传到Linux上解压
安装依赖
安装之前先安装我们需要的依赖关系
Ubuntu 用户选择 sudo apt-get install autoconf automake libtool curl make g unzip -y CentOS 用户选择 sudo yum install autoconf automake libtool curl make gcc-c unzip 如果是Centos Stream的可以把yum换成dnf
开始安装
第一步执行这条
# 第⼀步执⾏autogen.sh但如果下载的是具体的某⼀⻔语⾔不需要执⾏这⼀步。
./autogen.sh第二步执行
# 第⼆步执⾏configure有两种执⾏⽅式任选其⼀即可如下1、protobuf默认安装在 /usr/local ⽬录
./configure# 2、修改安装⽬录统⼀安装在/usr/local/protobuf下
./configure --prefix/usr/local/protobuf第三步执行这三句
make // 执⾏15分钟左右
make check // 执⾏15分钟左右
sudo make install有些同学可能会在 make check 出现错误例如 出现以上错误的原因是test的模块⾥⾯有⾮常多的测试⽤例这些⽤例对服务器环境要求特别严格需 要增⼤下swap分区具体操作可参考 https://blog.csdn.net/AlexWang30/article/details/90341172 建议可以先扩大3G再执行 make check 。如果还是报错再扩⼤到5G重新执行 make check 执行 make check 后 出现以下内容就可以执行 sudo make install 到此需要你回忆⼀下在执行configure时如果当时选择了第⼀种执行方式也就是./configure 那么到这就可以正常使⽤protobuf了。如果选择了第⼆种执行方式即修改了安装 目录那么还需要在/etc/profile 中添加⼀些内容
sudo vim /etc/profile
# 添加内容如下#(动态库搜索路径) 程序加载运⾏期间查找动态链接库时指定除了系统默认路径之外的其他路径
export LD_LIBRARY_PATH$LD_LIBRARY_PATH:/usr/local/protobuf/lib/
#(静态库搜索路径) 程序编译期间查找动态链接库时指定查找共享库的路径
export LIBRARY_PATH$LIBRARY_PATH:/usr/local/protobuf/lib/
#执⾏程序搜索路径
export PATH$PATH:/usr/local/protobuf/bin/
#c程序头⽂件搜索路径
export C_INCLUDE_PATH$C_INCLUDE_PATH:/usr/local/protobuf/include/
#c程序头⽂件搜索路径
export CPLUS_INCLUDE_PATH$CPLUS_INCLUDE_PATH:/usr/local/protobuf/include/
#pkg-config 路径
export PKG_CONFIG_PATH/usr/local/protobuf/lib/pkgconfig/最后一步
最后⼀步重新执⾏ /etc/profile ⽂件:
source /etc/profile连接动态库
此时安装好了但可能还是不行会报找不到动态库
这个时候进入到/etc/ld.so.conf.d/并创建一个protobuf.conf 写上这两句话 我们再查 这时候有了这时候就不会报错了此时真正安装成功 一些遗留问题
我在windows上也安装了protobuf安装方法也比这种简单的多但是运行时老是报找不到port_def.inc 并且如果用cmakenmake搭建也会出现同样的问题找不到port_def.inc文件可能是我哪里有问题肯望有大佬指点迷津