dart中使用protobuf

简介: dart中使用protobuf
为什么要使用protobuf

protobuf提供了效率、灵活性和易用性之间的平衡,使其成为各种场景(包括微服务、分布式系统和网络通信)中数据序列化和交换的有吸引力的选择

配置环境
  1. 安装protobuf
  2. 配置环境变量
  3. 引入类库
  4. protoc_plugin
  5. protobuf
    protobuf: ^3.1.0
    protoc_plugin: ^21.1.2
编写proto描述文件-person.proto
syntax = "proto3";
import "google/protobuf/timestamp.proto";
message Person {
  string name = 1;
  int32 id = 2;  // Unique ID number for this person.
  string email = 3;

  enum PhoneType {
    PHONE_TYPE_UNSPECIFIED = 0;
    PHONE_TYPE_MOBILE = 1;
    PHONE_TYPE_HOME = 2;
    PHONE_TYPE_WORK = 3;
  }

  message PhoneNumber {
    string number = 1;
    PhoneType type = 2;
  }

  repeated PhoneNumber phones = 4;

  google.protobuf.Timestamp last_updated = 5;
}

// Our address book file is just one of these.
message AddressBook {
  repeated Person people = 1;
}
编译生成dart文件

protoc --dart_out=. google/protobuf/timestamp.proto

protoc --dart_out=. ./*.proto

使用
test('test Proto', () async {
    final m1 = Person.create()..name = "李四"..id=5..email="123444"..phones.add(Person_PhoneNumber(
      number: "123456",
      type: Person_PhoneType.PHONE_TYPE_HOME,
    ))..lastUpdated = Timestamp(seconds: $fixnum.Int64.parseInt((DateTime.now().millisecondsSinceEpoch~/1000).toString()));
    final result = m1.writeToBuffer();
    print(m1.toString());
    print(m1.name);
    final p2 = Person.fromBuffer(result);
    p2.name = "张三";
    final result2 = p2.writeToBuffer();
    print(result2);
    print(p2.name);
  });
相关文章
|
Dart Android开发 iOS开发
比较 Flutter 日期选择器库【Flutter 专题 6】
日期选择器是对 UI 的有用补充,它使您的应用程序用户可以轻松地从日历中选择日期。无论您是在注册表单中添加出生日期字段,还是为用户提供预约时间段,您都可以使用日期选择器库来简化流程。 在本教程中,我们将探索 Flutter 的三个流行日期选择器库 Flutter、Flutter Datetime Picker、Flutter Date Range Picker 和date_time_picker。我们将检查每个库的功能并将每个库安装在一个简单的移动应用程序中。
1248 0
比较 Flutter 日期选择器库【Flutter 专题 6】
|
Dart 测试技术 开发工具
了解 Flutter 的 Timer 类和 Timer.periodic【Flutter 专题 19】
在构建移动应用程序时,我们经常会遇到必须在一定时间后执行任务的场景。还记得在进入应用程序之前看到闪亮的启动画面吗? 或者我们可能需要一段代码在一段时间后重复执行,比如显示剩余时间限制以填充一次性密码或每秒更改小部件的颜色以创建漂亮的动画。
5989 0
|
JSON Dart 测试技术
Flutter中高级JSON处理:使用json_serializable进行深入定制
Flutter中高级JSON处理:使用json_serializable进行深入定制
2288 3
|
Dart IDE 开发工具
Flutter Version Manager (FVM): Flutter的版本管理终极指南
Flutter Version Manager (FVM): Flutter的版本管理终极指南
5618 1
|
数据处理 开发者 C++
Kotlin协程与RxJava:谁将称雄现代应用开发?揭秘背后的技术博弈与选择之道!
【9月更文挑战第13天】本文对比了现代应用开发中备受欢迎的两种并发编程方案:Kotlin协程与RxJava。Kotlin协程以轻量级线程和挂起函数简化异步编程,尤其适合I/O密集型任务;RxJava基于观察者模式,擅长处理复杂异步数据流。文中还提供了示例代码,帮助开发者根据项目需求和偏好做出合适的选择。
288 1
|
Cloud Native 编译器 Linux
如何在Windows、Mac和Linux操作系统上安装Protocol Buffers(protobuf)编译器
如何在Windows、Mac和Linux操作系统上安装Protocol Buffers(protobuf)编译器
877 0
|
缓存 人工智能 API
【Python+微信】【企业微信开发入坑指北】2. 如何利用企业微信API主动给用户发应用消息
【Python+微信】【企业微信开发入坑指北】2. 如何利用企业微信API主动给用户发应用消息
951 0
|
API 数据安全/隐私保护 Android开发
Android WIFI使用简述(下)
Android WIFI使用简述(下)
585 0
|
存储 供应链 安全
新一代数据库技术——基于区块链的分布式存储系统
传统数据库系统通常采用集中式存储结构,容易受到单点故障和数据篡改的影响。本文将介绍基于区块链技术的分布式存储系统,探讨其在数据库领域的应用和优势,以及面临的挑战和未来发展趋势。
|
存储 缓存 Dart
Flutter笔记:目录与文件存储以及在Flutter中的使用(下)
Flutter笔记:目录与文件存储以及在Flutter中的使用(下)
1327 0