Лучшие практики для разработки стека протоколов в Java - PullRequest
4 голосов
/ 20 сентября 2011

Каковы лучшие практики разработки стека протоколов в Java?

В этом конкретном случае мое Java-приложение будет «общаться» с периферийным устройством ПК, шина которого будет передавать данные в формате протокола.

Пример:

Представьте, что в моем протоколе есть сообщение, состоящее из одного целого числа, строки и списка целых чисел:

class MyMessage { int filed1; String filed2; LinkedList<int> field3;}

То, что я хочу в качестве конечного продукта, это то, что позволяет сделать это:

// Message to fill
MyMessage msg = new MyMessage();

// InputStream with the data to bind
InputStream stream = myPeripheralBus.getInputSTream();

msg.fill(stream);

// Here, msg fields are filled with the values that were on the InputStream

1 Ответ

2 голосов
/ 26 сентября 2011

Проект буфера протокола Google соответствует большинству ваших требований. за исключением структуры данных LinkedList для field3, но, поскольку g-p-b сохранил порядок повторяющихся значений, я думаю, вам этого достаточно.

Буферы протокола - это способ кодирования структурированных данных в эффективном, но расширяемом формате. Google использует буфер протоколов почти для всех своих внутренних протоколов RPC и форматов файлов.

шаг 1, установите g-p-b из http://code.google.com/apis/protocolbuffers/, прочитайте документы.

шаг 2, определите ваше message.proto так:

message UserDetail {

  required string id = 1;
  optional string nick = 2;
  repeated double money = 3;

}

шаг 3, используйте protoc, скомпилируйте .proto и сгенерируйте файл UserDetail.java.

...
public interface UserDetailOrBuilder
        extends com.google.protobuf.MessageOrBuilder {

    // required string id = 1;
    boolean hasId();

    String getId();

    // optional string nick = 2;
    boolean hasNick();

    String getNick();

    // repeated double money = 3;
    java.util.List<java.lang.Double> getMoneyList();

}

public static final class UserDetail extends
        com.google.protobuf.GeneratedMessage
        implements UserDetailOrBuilder ...

шаг 4, простой звонок

UserDetail.parseFrom(input);
User.UserDetail t.writeTo(output);

g-p-b имеет дополнение на другом языке, отметьте http://code.google.com/p/protobuf/wiki/ThirdPartyAddOns

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...