图书馆网站建设方案全面的vi设计公司

张小明 2026/1/11 16:33:58
图书馆网站建设方案,全面的vi设计公司,wordpress5连接中文,logo设计在线制作神器概述#xff1a;Protocol Buffers#xff08;protobuf#xff09;是一种由 Google 提出的语言无关、平台无关的结构化数据描述与序列化机制#xff0c;通过 .proto 文件以 IDL 形式定义数据结构#xff0c;再由编译器自动生成各语言的读写代码#xff1b;在实际使用中Protocol Buffersprotobuf是一种由 Google 提出的语言无关、平台无关的结构化数据描述与序列化机制通过.proto文件以 IDL 形式定义数据结构再由编译器自动生成各语言的读写代码在实际使用中开发者只需像操作普通对象一样设置字段protobuf 会将其高效序列化为紧凑的二进制数据用于文件存储或网络传输相比 JSON/XML 具有体积更小、解析更快、类型约束更严格等优势常用于高性能服务间通信如 gRPC、配置下发和日志/状态同步等场景是分布式系统和后端工程中的基础通信组件。例子接下来使用一个简单的例子熟悉一下整体的流程和使用前提是安装了相关的库主要是protoc和cmake例子就是一个简单的读端和写端交互首先创建一个工程目录proto_demo||___ |____| || |proto srcproto主要是放.proto文件src放应用层的程序1在proto目录下创建一个monitor.protosyntax proto3; //命名空间 package my_monitor; // CPU 采样数据 message CpuSample { uint64 timestamp_ms 1; // 时间戳(ms) float load_1m 2; // 1分钟负载 float load_5m 3; float load_15m 4; repeated float core_usage 5; // 每核利用率数组 } // 一次上报数据 message MonitorReport { string host 1; // 主机名 CpuSample cpu 2; // 嵌套 message组合 mapstring, string tags 3; // 字典扩展字段 enum Level { // 枚举固定取值集合 LEVEL_UNSPECIFIED 0; // enum 第一个必须是 0默认值 INFO 1; WARN 2; ERROR 3; } Level level 4; // 枚举字段 }数据类型基本和c的数据类型一样但是每一个massage里面的字段后面跟着的1,2,3...不是值是序号将这个文件进行编译可生成.h .c文件在proto目录下创建创建cmake文件# proto/CMakeLists.txt find_package(Protobuf REQUIRED) set(PROTO_FILES ${CMAKE_CURRENT_SOURCE_DIR}/monitor.proto ) # 生成 .pb.cc / .pb.h 到 build/proto 目录 protobuf_generate_cpp(PROTO_SRCS PROTO_HDRS ${PROTO_FILES}) add_library(monitor_proto STATIC ${PROTO_SRCS} ${PROTO_HDRS} ) target_include_directories(monitor_proto PUBLIC ${CMAKE_CURRENT_BINARY_DIR} ${Protobuf_INCLUDE_DIRS} ) target_link_libraries(monitor_proto PUBLIC ${Protobuf_LIBRARIES} )(2)在src目录下创建read和write程序write是将数据进行序列化read相反对序列化的数据进行反序列化并打印这两个程序是在本地执行的所以通过文件流传输就可以如果通过网络传输就要使用字符流并进行打包进行传输write:#include fstream #include iostream #include monitor.pb.h int main() { // 1) 创建消息对象相当于一个“结构体实例” my_monitor::MonitorReport report; // 2) 设置普通字段string/enum report.set_host(server-01); report.set_level(my_monitor::MonitorReport::WARN); // 3) 设置嵌套 messagemutable_xxx() 返回可修改指针 auto* cpu report.mutable_cpu(); cpu-set_timestamp_ms(1730000000000ULL); cpu-set_load_1m(0.42f); cpu-set_load_5m(0.35f); cpu-set_load_15m(0.20f); // 4) repeated 字段add_xxx() 追加元素 cpu-add_core_usage(0.12f); cpu-add_core_usage(0.55f); // 5) map 字段mutable_tags() 拿到 map然后像字典一样写 (*report.mutable_tags())[region] ap-shanghai; (*report.mutable_tags())[container_id] c123; // 6) 序列化到二进制文件 std::ofstream ofs(report.bin, std::ios::binary); if (!report.SerializeToOstream(ofs)) { std::cerr Serialize failed\n; return 1; } std::cout Wrote report.bin\n; return 0; }read:#include fstream #include iostream #include monitor.pb.h int main() { my_monitor::MonitorReport report; // 1) 从文件反序列化 std::ifstream ifs(report.bin, std::ios::binary); if (!report.ParseFromIstream(ifs)) { std::cerr Parse failed\n; return 1; } // 2) 读取普通字段 std::cout host report.host() \n; std::cout level report.level() \n; // enum 是整数WARN2 // 3) 读取嵌套 message if (report.has_cpu()) { // 对 message 字段可以判断是否出现过 const auto cpu report.cpu(); std::cout load1 cpu.load_1m() \n; std::cout cores cpu.core_usage_size() \n; for (int i 0; i cpu.core_usage_size(); i) { std::cout core[ i ] cpu.core_usage(i) \n; } } // 4) 读取 map if (report.tags().contains(container_id)) { std::cout container_id report.tags().at(container_id) \n; } return 0; }对于里面字段的一些操作都是在编译的时候自动生成的在.h .c文件中命名规则都是差不多的 Protobuf C API 速查表proto3一、普通字段string / 数字 / bool / enum//proto string host 1; int32 age 2; bool ok 3; enum Level { LEVEL_UNSPECIFIED 0; INFO 1; } Level level 4;//C 用法 // 写 msg.set_host(server-01); msg.set_age(18); msg.set_ok(true); msg.set_level(MyMsg::INFO); // 读 msg.host(); msg.age(); msg.ok(); msg.level();二、message 字段嵌套结构体// 改关键 auto* cpu msg.mutable_cpu(); cpu-set_load_1m(0.5); // 读 msg.cpu().load_1m(); // 判断是否出现过 msg.has_cpu();三、repeated 字段数组 / 列表// 写 msg.add_core_usage(0.12); msg.add_core_usage(0.55); // 读 int n msg.core_usage_size(); for (int i 0; i n; i) { float v msg.core_usage(i); }四、map 字段键值对// 写 (*msg.mutable_tags())[region] ap-shanghai; // 读 if (msg.tags().contains(region)) { std::string v msg.tags().at(region); }五、has_xxx() 到底什么时候能用字段类型has_xxx()普通字段string/int❌proto3 默认无message 字段✅repeated❌map❌optional 字段✅msg.has_name(); // 可以判断是否真的设置过六、序列化 / 反序列化必须会//序列化 msg.SerializeToString(out); msg.SerializeToOstream(ofs); //反序列化 msg.ParseFromString(in); msg.ParseFromIstream(ifs);回到项目在src中创建一个cmake对这两个读写程序进行编译# src/CMakeLists.txt # write 程序 add_executable(write_demo write.cpp ) target_link_libraries(write_demo PRIVATE monitor_proto ) # read 程序 add_executable(read_demo read.cpp ) target_link_libraries(read_demo PRIVATE monitor_proto )3最后构建整个项目的cmake文件进行整体的构建#proto_demo/CMakeLists.txt cmake_minimum_required(VERSION 3.10) project(proto_demo CXX) set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 先构建 proto 模块 add_subdirectory(proto) # 再构建应用 add_subdirectory(src)进行构建在proto_demo目录下创建一个目录build并进入进行操作cd /proto_demomkdir -p buildcd buildcmake ..make -j8最后在在build目录会有个src里面有可执行程序依次执行可看到现象./write_demo./read_demo最后讲一下如何安装protobuf这里使用的是离线安装包的方法去git上下载这个安装包执行这个脚本#!/usr/bin/env bash set -e cd $(dirname ${BASH_SOURCE[0]}) THREAD_NUM$(nproc) # https://github.com/protocolbuffers/protobuf/releases/download/v3.14.0/protobuf-cpp-3.14.0.tar.gz # Install proto. VERSION3.14.0 PKG_NAMEprotobuf-${VERSION}.tar.gz tar xzf ${PKG_NAME} pushd protobuf-${VERSION} mkdir cmake/build cd cmake/build cmake .. \ -DBUILD_SHARED_LIBSON \ -Dprotobuf_BUILD_TESTSOFF \ -DCMAKE_INSTALL_PREFIX:PATH/usr/local \ -DCMAKE_BUILD_TYPERelease make -j$(nproc) make install ldconfig popd rm -rf PKG_NAME protobuf-${VERSION}
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

网络框架做百度移动网站优化排

如何在Android 14上轻松运行ZXing:终极兼容性升级指南 【免费下载链接】zxing ZXing ("Zebra Crossing") barcode scanning library for Java, Android 项目地址: https://gitcode.com/gh_mirrors/zx/zxing 你是否正在为ZXing在Android 14上无法正…

张小明 2026/1/7 20:42:21 网站建设

南通网站制作wordpress 直接连接数据库

cloudflare的免费存储还是很香的,所以想试试怎么通过接口的方式使用,但是最后发现不能在web端使用,只能通过后端来访问,而且R2用的是亚马逊的s3接口标准,文档:https://developers.cloudflare.com/r2/exampl…

张小明 2026/1/11 12:17:14 网站建设

angular 做网站网站优化seo技术

PyTorch-CUDA-v2.9镜像部署在线推理服务的延迟优化 在当今AI应用广泛落地的时代,从智能客服到实时图像识别,用户对响应速度的要求越来越高。一个看似简单的“点击即出结果”的背后,往往隐藏着复杂的模型推理流程。尤其当这些模型运行在云端、…

张小明 2026/1/9 22:11:45 网站建设

网站开发回访话术免费的企业品牌策划公司

好的,遵照您的要求,我将基于随机种子 1766440800066 的“灵感”,为您撰写一篇关于语音识别组件的深度技术文章。本文将避开常见的“Hello Siri/Google”案例,转而深入剖析现代端到端语音识别系统的核心组件、演进历程、面临的挑战…

张小明 2026/1/9 14:26:34 网站建设

太原自学网站建设网站导航栏按钮

截至2025年底,OPPO在售/刚发布的主力手机可分为「Find 顶级旗舰」「Reno 轻旗舰」「K/A 高性价比」3条主线,并有一加性能子品牌并行。下面按「系列-代表机型-核心卖点-价格区间」四段式速览,方便快速比较。### 一、年度全能旗舰:F…

张小明 2026/1/7 20:42:26 网站建设

网站建站定做wordpress 片刻主题

YOLOv8能否检测火山灰扩散?航空安全预警系统 在2010年冰岛埃亚菲亚德拉火山爆发后,欧洲空域关闭了整整六天,超过10万架次航班被取消,经济损失高达数十亿美元。这一事件暴露了一个长期被忽视的问题:我们对高空火山灰云的…

张小明 2026/1/7 20:42:27 网站建设