今天刚开始学习protobuf。
在学到repeadted的时候出了问题。现在将问题总结如下,以作备录。
package xmty;
option java_package = "comtwo.xmty.java";
option java_outer_classname = "PeopleTest";
message Peoples{
required int32 id = 1;
optional string sex = 2;
repeated string ppp = 3;
}
转成JAVA,后JAVA调用代码如下:
public static void main(String[] args) {
// TODO Auto-generated method stub
PeopleTest.Peoples.Builder b = PeopleTest.Peoples.newBuilder();
b.setId(1);
b.setSex(PeopleTest.Peoples.SexType.MALE.toString());
for (int i = 0; i < 10; i++) {
b.setPpp(i, "zms"+i);
}
Peoples p = b.build();
System.out.println(p);
}
时,出现错误:
Exception in thread "main" java.lang.UnsupportedOperationException
at java.util.AbstractList.set(Unknown Source)
at comtwo.xmty.java.PeopleTest$Peoples$Builder.setPpp(PeopleTest.java:692)
at comtwo.xmty.java.Test2.main(Test2.java:26)
按JAVA编程的习惯,正常的要设置某个的值时,都是使用的set来设置值。
但是,在protobu中的repeated的这个属性,要设置值,要用add。
正常代码如下:
public static void main(String[] args) {
// TODO Auto-generated method stub
PeopleTest.Peoples.Builder b = PeopleTest.Peoples.newBuilder();
b.setId(1);
b.setSex(PeopleTest.Peoples.SexType.MALE.toString());
for (int i = 0; i < 10; i++) {
b.addPpp("zms"+i);
}
Peoples p = b.build();
System.out.println(p);
}
也就是说,如果使用了set的话,就等于重写对应index的值。
因这个问题,卡了我好久的时候。且记之。
分享到:
相关推荐
在MATLAB中,Repeated Measures ANOVA(重复测量方差分析)是一种统计方法,用于分析同一组对象在不同处理或时间点上的数据差异。这种方法特别适用于研究中同一个实验对象经历了多次观测的情况,例如心理学实验中的...
- **填充数据**:使用setter方法设置字段值。 - **序列化数据**:调用相应的序列化方法将对象转换为字节数组。 - **反序列化数据**:从字节数组恢复对象。 #### 六、总结 通过本教程的学习,我们可以了解到...
`required`字段是必须提供的,`optional`字段可以省略,`repeated`字段可以包含多个值。 定义完消息类型后,使用Protocol Buffer编译器(protoc)将.proto文件转换为目标编程语言(如Java、C++或Python)的源代码。...
4. 设置消息字段的值。 5. 创建消息类对象。 6. 应用序列化和反序列化操作,完成数据的发送或接收。 #### 三、Protocol Buffer 实例解析 假设我们需要定义一个学生类,该类包含基本的信息如学号、姓名、性别等,...
3. **重复长度**(`LER`, Repeated Length): 重复数据长度,用于校验。 4. **源地址**(`SA`, Source Address): 发送方地址。 5. **目标地址**(`DA`, Destination Address): 接收方地址。 6. **功能码**(`FC`, ...
SHT10的数据手册是了解其工作原理和操作方法的关键文档。手册中会详细说明传感器的电气特性、物理尺寸、引脚定义、通信协议以及测量范围和精度等参数。例如,SHT10的测量范围通常为-40℃到80℃的温度和0% to 100%的...
`repeated`字段表示可以有多个值。 4. **枚举类型**:如`PhoneType`,用于为特定字段提供预定义的值,如`MOBILE`、`HOME`和`WORK`。 5. **默认值**:在protobuf中,某些字段可以设置默认值,如`type = 2 [default ...
- **可编程温度阈值**:用户可以通过配置寄存器设置高/低温报警阈值。 - **中断输出**:当温度超出设定阈值时,可以激活INT/O引脚作为中断信号。 - **I²C兼容**:符合I²C协议标准,支持最高400kHz的数据传输速率。...
注意,标签值在1到15范围内的编码占用一个字节,包括识别数字和字段类型(更多关于此的信息可以在Protocol Buffer编码中找到)。标签在16到2047范围内的占用两个字节。因此,你应该保留标签1到15用于非常频繁出现的...
在PDK(Process Design Kit)中,PCELL用于构建标准化的晶体管、电阻、电容等基本元件,这些元件可以根据特定的设计需求进行参数化配置,如改变晶体管的长度、宽度,或调整电阻值等。PCELL使得设计师能够快速创建和...
- **重复周期(Repeated Cycle)**:通常不直接关联于滤波器,但在某些应用中可能指的是滤波器工作过程中信号的周期性重复。 #### 二、关键参数与概念解析 - **最大信噪比(Maximum Signal-to-Noise Ratio)**:滤波器...
- 提供时钟同步和重复启动(Repeated START)条件。 - 可编程的时钟源和预分频器。 - 支持中断驱动的数据传输。 - 拥有16字节深度的发送和接收FIFO。 ### 功能概述(Functional Overview) I2C模块的功能包括: -...
在mac操作系统中使用Python处理Protocol Buffers(简称Protobuf)涉及到Protobuf的安装、配置以及在Python项目中嵌入Protobuf的使用。Protocol Buffers是一种由Google开发的数据序列化协议,广泛应用于网络通信、...
- **消息类型**(Message Types):表示结构化的数据结构,每个消息类型都包含一系列字段,这些字段可以是必填(required)、可选(optional)或重复(repeated)的。 - **枚举类型**(Enum Types):用于定义一组...
标签"protobuf"表明这个压缩包与protobuf协议紧密相关,protobuf是广泛应用于各种场景的序列化框架,包括但不限于网络通信、数据库存储、配置文件、跨平台数据交换等。它提供了高效、紧凑的编码方式,使得数据在网络...
- **Variable**:变量可以进行计算,如**Variable name**、**Variable class type** 和 **Calculation type**,例如计数、求和、平均值等。 通过这些配置选项,iReport使得开发者能够灵活地设计和定制复杂的报表...
通过模拟不同环境下的任务执行情况,研究人员比较了各种配置下任务完成的累积价值(Accumulated Values),以此来衡量两种策略的有效性。实验结果显示,在特定条件下,通过适时地重新分配和重新安排任务,能够有效...
- **下位机软件**:Step 7 Micro/WIN,用于配置和监控PLC的工作状态。 - **串口监视软件**:HHDFreeSerialPortMonitor,用于监视和记录PLC与PC之间的通信数据。 ##### 硬件环境 - **PLC**:SIMATIC S7-200 CPU 226 ...