Protocol buffers 原型拼花师唐';不要写假、0和空字符串

Protocol buffers 原型拼花师唐';不要写假、0和空字符串,protocol-buffers,parquet,protobuf-java,Protocol Buffers,Parquet,Protobuf Java,在以下示例中: try(拼花编剧)= 新原型拼花机( 新路径(“文件:/tmp/foo.parquet”), 例如,班级, 精炼的 默认块大小, 默认值(页面大小){ 作家( 示例:newBuilder() .setTs(System.currentTimeMillis()) .setTenantId(“承租人”) .setSomeFlag(错误) .setSomeInt(1) .setOtherInt(0) .build()); } } 示例.proto文件: syntax=“proto3”

在以下示例中:

try(拼花编剧)=
新原型拼花机(
新路径(“文件:/tmp/foo.parquet”),
例如,班级,
精炼的
默认块大小,
默认值(页面大小){
作家(
示例:newBuilder()
.setTs(System.currentTimeMillis())
.setTenantId(“承租人”)
.setSomeFlag(错误)
.setSomeInt(1)
.setOtherInt(0)
.build());
}
}
示例
.proto
文件:

syntax=“proto3”;
包com.example;
消息示例{
uint64 ts=1;
字符串tenantId=2;
bool-someFlag=3;
int32-someInt=4;
int32-otherInt=2;
}
生成的拼花地板文件将不包含字段
someFlag
otherInt
,因为它们分别是
false
0


有没有办法让它写下来,或者我应该在读卡器端处理这个问题?

在proto3中,状态跟踪历史上没有启用,唯一的状态规则是零默认值。幸运的是,这种情况最近在protoc的新版本中发生了变化。现在可以在proto3中的from字段中使用
可选
关键字来启用此功能。因此:添加
可选的
,任何兼容的实现都应该满足您的需要。默认值仍然为零/false/etc,但是如果显式设置了它们:它们将被序列化

syntax=“proto3”;
包com.example;
消息示例{
可选uint64 ts=1;
可选字符串tenantId=2;
可选bool someFlag=3;
可选的int32 someInt=4;
可选的int32 otherInt=2;//[sic]
}

另外,第二个2应该是5,你知道哪个版本吗?我尝试了最新的protobuf java 3.x(3.15.8),它甚至不会生成java类,失败的原因是:“Proto3语法中不允许使用显式的‘可选’标签。要在Proto3中定义‘可选’字段,只需删除‘可选’标签,因为默认情况下字段是‘可选’的。”@caarlos0是在3.15.0中默认启用的-请参阅发行说明。事实证明,我的maven插件使用的是旧版本,尽管我要求的是新版本。。。是的,这就解决了。谢谢