1、简介 ProtoBuf 为结构化数据的序列化提供了一种快速高效的方式,它是 JSON 的紧凑型高性能替代品。
与基于文本并需要解析的 JSON 不同,protobuf 可生成适用于多种语言的优化代码。这使得在不同系统间发送结构化数据变得更加容易。
使用 protobuf,只需在 .proto 文件中定义一次数据结构。然后,就可以使用生成的代码来处理跨流和跨平台的数据传输。在处理类型化、结构化数据时,它是理想的选择,尤其是当 Payload 比较大的时候。
Protobuf 支持字符串、整数、布尔值和浮点数等常见类型。它们还能很好地与 List 和 Map 配合使用,使复杂的数据易于管理。
本文将带你了解如何在 protobuf 中使用 Map。
2、了解 Protobuf 中的 Map 2.1、Map 是什么? Map 是一种键值数据结构,类似于字典。
每个键都映射到一个特定的值,从而使查找快速高效。类似于 DNS 系统:每个域名都指向一个 IP 地址。
2.2、定义 Map 的语法 Protobuf 3 对 Map 提供了开箱即用的支持。
示例如下:
message Dictionary { map<string, string> pairs = 1; } 使用 map<key_type, value_type> 定义字段。Key 必须是 scalar 类型,如 string、int32 或 bool。值可以是任何有效的 protobuf 类型 - scalar、enum 或其他消息。
1、概览 Protocol Buffer (Protobuf) 是一种用于序列化结构化数据的二进制格式。它是由 Google 开发的,并且被广泛应用于跨平台和跨语言的数据通信。Protocol Buffer 使用简洁、高效的编码方案,可以将结构化数据定义为消息类型,并生成针对不同编程语言的数据访问代码。这使得在不同的系统之间传输和解析数据变得更加简单和高效。Protocol Buffer 具有广泛的支持,包括 Java、C++、Python、Golang 等编程语言。
Protobuf Timestamp 类型代表一个时间点,与任何特定时区无关。本文将带你了解如何把 Protobuf Timestamp 实例转换为 Java 的本地时间类型,如 LocalDate。
2、Maven 依赖 在 pom.xml 中添加 protobuf-java 依赖:
<dependency> <groupId>com.google.protobuf</groupId> <artifactId>protobuf-java</artifactId> <version>4.26.1</version> </dependency> 该依赖提供了 Timestamp 和其他与 Protobuf 相关的类。
3、Timestamp 类 Protobuf Timestamp 类表示自 Unix 纪元以来的时间点。与时区或本地日历没有关系。
它表示的是某个时间点的秒数和纳秒数。下面是使用 Java Instant 对象计算当前时间戳的示例:
Instant currentTimestamp = Instant.now(); Timestamp timestamp = Timestamp.newBuilder() .setSeconds(currentTimestamp.getEpochSecond()) .setNanos(currentTimestamp.getNano()) .build(); 如上,通过 Instant 对象计算时间戳。首先,创建一个 Instant 对象,表示给定点的日期和时间。然后,提取秒和纳秒,并将它们传递给 Timestamp 实例。
4、把 Timestamp 实例转换为 LocalDate 在将 Timestamp 转换为 LocalDate 时,必须考虑时区及其与 UTC 的相关偏移,以准确表示本地日期。要将 Timestamp 转换为 LocalDate,首先要创建一个具有特定秒和纳秒的 Timestamp 实例: