2017-04-15 74 views
0

我有2 protobuff对象源和目标例如Java的一个protobuff对象复制到其他protobuff对象

message Source{ 
    optional string firstName = 1; 
    optional string lastName = 2; 
} 

message Target { 
    optional string firstName = 1; 
    optional string lastName = 2; 
} 

我要复制从源领域的目标,解决方案,我有

if(source.hasFirstName()) target.setFirstName(source.getFirstName()); 
if(source.hasLastName()) target.setLastName(source.getLastName()); 

上面的代码看起来很冗长。 Java 8中有简单的解决方案来处理这个问题吗?

回答

0

如果你的消息是相同的,就像在提供的例子中一样,只有它们的名称不同,你可以将Source序列化为一个数组,然后将它反序列化为目标。

Target target = Target.parseFrom(source.toByteArray()); 

如果字段的名称和类型是相同的,但有不同的号码,你可以derialize /反序列化文本

Target.Builder builder = Target.newBuilder(); 
TextFormat.merge(source.toString(), builder); 
Target target = builder.build();