2016-06-06 3 views
0

Я относительно новичок в Protobufs, и мне было интересно, как я буду использовать его для обработки списка структур.Использование Protobuf для обработки файла конфигурации

Допустим, у меня есть файл конфигурации, который выглядит следующим образом:

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?

Спасибо!

+0

В сообщении 'BucketList' вы хотели сказать' repeat' вместо 'required'? –

+0

Я сделал. Я понял, что это вызывает у меня огромные проблемы. Сейчас я занимаюсь этой проблемой. Как только я это выясню, я отправлю решение здесь. – Akshay

ответ

0

У вас неправильное представление о том, для чего используется protobuf, это библиотека обмена данными, которая означает ее использование для кодирования и обмена данными между программами. Он никогда не предназначался для использования в конфигурации и не имеет возможности читать текстовое определение данных, поскольку оно имеет дело с двоичными файлами.

Глядя на ваш формат конфигурации у вас есть два варианта:

  1. формат вы выбрали выглядит как HOCON, так https://github.com/typesafehub/config должен быть в состоянии прочитать и обеспечить считываемый объект конфигурации с небольшим количеством редактирования.
  2. Если вам нужна конфигурация типа config (определяющая структуру конфигурации как фактический объект java), вам нужно будет использовать другой формат, который поддерживает десериализацию объекта. Конфигурация JSON может быть считан в объекты с использованием библиотеки как https://github.com/google/gson или https://github.com/FasterXML/jackson
+0

Э-э, что? https://developers.google.com/protocol-buffers/docs/reference/java/com/google/protobuf/TextFormat Буферные протоколы полностью используются для настройки. –

+0

Я думал, что протобуф лучше использовать для больших наборов данных? (Я мог быть совершенно ошибаюсь в этом). – Akshay

+0

@LouisWasserman TIL, хотя документация представляется крайне редкой. – Kiskae

0

Это вполне приемлемо использовать Protobuf в качестве механизма, чтобы объявить и разобрать текстовый файл настроек. Однако следует иметь в виду, что целью Protobuf является объявление формата файла, будь то простой текст или его бинарный формат. Семантические ограничения более высокого уровня должны выполняться в коде пользовательского приложения, как только конфигурация будет считана.

Смежные вопросы