Java协议缓冲区-使用扩展字段构造子消息

e

我们如何通过在协议缓冲区中添加扩展字段来构造子消息。在C ++中,一种实现方法是通过将MutableMessage(Message,FieldDescriptor)与反射接口一起使用。我们如何在Java中做类似的事情?

我是新手,所以对协议缓冲区了解不多。

布鲁斯·马丁(Bruce Martin)

继jonathons答案之后,这是在Java中创建和访问扩展的示例

Protobuf的定义:

message Message
{
    extensions 100 to max;

    required uint64 A = 1;
}

message Event
{
    extend Message { 
        required Event ext = 101; 
        optional string name = 102;
    }

    extensions 100 to max;

    required uint64 B = 1;

}

使用扩展名:

Extension01.Message.Builder bm = Extension01.Message.newBuilder();
Extension01.Message.Builder bm1 = Extension01.Message.newBuilder();
Extension01.Event.Builder be = Extension01.Event.newBuilder();
FileOutputStream out = new FileOutputStream(extFileOut);

be.setB(5678);


bm.setA(123);
bm.setExtension(Extension01.Event.ext, be.build()); // set the extension value

bm.build().writeDelimitedTo(out);
out.close();

FileInputStream in = new FileInputStream(extFileOut);

ExtensionRegistry registry = ExtensionRegistry.newInstance(); // create extension registry
Extension01.registerAllExtensions(registry);  // Allocate the extensions 
bm1.mergeDelimitedFrom(in, registry);
in.close();

Event extension = bm1.getExtension(Extension01.Event.ext); // get the extension
if (extension == null) {
    System.out.println("No extension");
} else {
    System.out.println(extension.getB());
}

编辑:

Line setting extension value:

bm.setExtension(Extension01.Event.ext, be.build());

变量Extension01.Event.ext由协议缓冲区生成,可用于获取/输入扩展值。

编辑2:

这就是我认为使用extensionInfo的方式(我自己没有尝试过):

ExtensionInfo extensionInfo = registry.findExtensionByNumber(..., 101);
bm1.getField(extensionInfo.descriptor);
bm1.setField(extensionInfo.descriptor, value)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Java协议缓冲区-消息大小

来自分类Dev

为什么在Java中使用协议缓冲区

来自分类Dev

协议缓冲区消息的字节序

来自分类Dev

损坏的协议缓冲区消息

来自分类Dev

协议缓冲区-分配嵌套消息

来自分类Dev

在协议缓冲区中分隔消息

来自分类Dev

使用Java协议缓冲区的批量Google数据存储区查询

来自分类Dev

C ++类应包含协议缓冲区消息还是从协议缓冲区消息构造/填充

来自分类Dev

将协议缓冲区编码的消息从Python Server发送到Java客户端

来自分类Dev

Java协议缓冲区是否可以在重复字段的列表获取器上返回null?

来自分类Dev

如何通过Java代码在协议缓冲区中设置子类字段?

来自分类Dev

在协议缓冲区消息中存储二进制数据缓冲区

来自分类Dev

使用ScalaPB中的协议缓冲区生成Java和Scala类

来自分类Dev

在使用Java的客户端服务器中的协议缓冲区中需要帮助

来自分类Dev

使用ScalaPB中的协议缓冲区生成Java和Scala类

来自分类Dev

协议缓冲区是否支持move构造函数

来自分类Dev

研究奇怪的协议缓冲区消息(解码和编码)

来自分类Dev

在Julia中通过WebSocket发布协议缓冲区消息

来自分类Dev

将POJO转换为协议缓冲区请求消息

来自分类Dev

在OSX上无法识别协议缓冲区扩展

来自分类Dev

获取协议缓冲区中的字段描述符

来自分类Dev

协议缓冲区是否支持byte []字段?

来自分类Dev

添加到协议缓冲区重复字段

来自分类Dev

使用协议缓冲区的Python项目,部署问题

来自分类Dev

使用协议缓冲区序列化日期

来自分类Dev

协议缓冲区,在哪里使用它们?

来自分类Dev

使用ScalaPBC for Scala 2.10编译协议缓冲区吗?

来自分类Dev

使用C ++ API解析协议缓冲区中的错误

来自分类Dev

使用协议缓冲区的FileOutputStream的每日转换?

Related 相关文章

  1. 1

    Java协议缓冲区-消息大小

  2. 2

    为什么在Java中使用协议缓冲区

  3. 3

    协议缓冲区消息的字节序

  4. 4

    损坏的协议缓冲区消息

  5. 5

    协议缓冲区-分配嵌套消息

  6. 6

    在协议缓冲区中分隔消息

  7. 7

    使用Java协议缓冲区的批量Google数据存储区查询

  8. 8

    C ++类应包含协议缓冲区消息还是从协议缓冲区消息构造/填充

  9. 9

    将协议缓冲区编码的消息从Python Server发送到Java客户端

  10. 10

    Java协议缓冲区是否可以在重复字段的列表获取器上返回null?

  11. 11

    如何通过Java代码在协议缓冲区中设置子类字段?

  12. 12

    在协议缓冲区消息中存储二进制数据缓冲区

  13. 13

    使用ScalaPB中的协议缓冲区生成Java和Scala类

  14. 14

    在使用Java的客户端服务器中的协议缓冲区中需要帮助

  15. 15

    使用ScalaPB中的协议缓冲区生成Java和Scala类

  16. 16

    协议缓冲区是否支持move构造函数

  17. 17

    研究奇怪的协议缓冲区消息(解码和编码)

  18. 18

    在Julia中通过WebSocket发布协议缓冲区消息

  19. 19

    将POJO转换为协议缓冲区请求消息

  20. 20

    在OSX上无法识别协议缓冲区扩展

  21. 21

    获取协议缓冲区中的字段描述符

  22. 22

    协议缓冲区是否支持byte []字段?

  23. 23

    添加到协议缓冲区重复字段

  24. 24

    使用协议缓冲区的Python项目,部署问题

  25. 25

    使用协议缓冲区序列化日期

  26. 26

    协议缓冲区,在哪里使用它们?

  27. 27

    使用ScalaPBC for Scala 2.10编译协议缓冲区吗?

  28. 28

    使用C ++ API解析协议缓冲区中的错误

  29. 29

    使用协议缓冲区的FileOutputStream的每日转换?

热门标签

归档