使用Protobuf处理配置文件

时间:2016-06-06 23:19:30

标签: java protocol-buffers

我对Protobufs相对较新,我想知道如何使用它来处理结构列表。

假设我有一个如下所示的配置文件:

Bucket{
    name = "A";
    path = "~/Document/...";
    traffic = 5;
}
Bucket{
    name = "B";
    path = "~/Document/...";
    traffic = 6;
}
Bucket{
    name = "C";
    path = "~/Document/...";
    traffic = 7;
}

等等。

所以我使用protobuf来构建它,以便以后在Java中使用。我基本上试图在地图中创建一个地图(一个protobuf来帮助找到正确的存储桶,然后是另一个地图来获取存储桶中的成员属性)。

option java_outer_classname = "Buckets";

message Bucket {
    required string name = 1;
    required string path = 2;
    optional int32 traffic = 3;
}

message BucketList {
    required Bucket bucket = 1;
}

我对如何将两者联系起来很困惑,例如,如何将配置文件传递到protobuf方法(在编译成java类之后)并用来访问存储桶成员来执行类似的操作说从名称为A的桶中获取路径?

谢谢!

2 个答案:

答案 0 :(得分:1)

使用Protobuf作为声明和解析文本配置文件的机制是完全可以接受的。但是,必须记住,Protobuf的目的是声明文件的格式,无论是纯文本还是二进制有线格式。一旦读取了配置,就需要在自定义应用程序代码中强制执行更高级别的语义约束。

答案 1 :(得分:-1)

您对protobuf的用途有错误的想法,它是一个数据交换库,意味着它用于在程序之间编码和交换数据。它从未打算用于配置,并且没有办法读取基于文本的数据定义,因为它处理二进制文件。

查看配置格式,您有两种选择:

  1. 您选择的格式与HOCON非常相似,因此https://github.com/typesafehub/config应该能够阅读并提供可读的配置对象并进行少量编辑。
  2. 如果你想要一个类型安全的配置(将配置的结构定义为一个实际的java对象),你需要使用一些支持反序列化的对象格式。可以使用https://github.com/google/gsonhttps://github.com/FasterXML/jackson
  3. 等库将JSON配置读入对象