Как получить байт [] из сериализованных данных буфера протокола для записи в базу данных?

Я пытаюсь использовать буферы протокола для хранения сериализованных данных в базе данных для веб-приложения, созданного в java.

Я создал файлы .proto и скомпилировал их, чтобы получить сгенерированные классы. Также я могу создавать объекты сообщения, используя метод setters & finally build(). Но чтобы сохранить его в базе данных, мне нужны сериализованные данные в виде байтовых [] или байтовых буферов. Как мне, наконец, получить это из экземпляров сообщений ??

    import com.paratha.serializers.protocolbuffers.CommentProto.Comment;

    Comment.Builder comment=Comment.newBuilder();
    comment.setCommentBody("This is the first comment!").setUserId(32433).build();  

Как получить отсюда сериализованные данные для записи в базу данных?


person Rajat Gupta    schedule 04.03.2011    source источник


Ответы (1)


Google сделал это очень легко :) :

MyProtocolBufferObject myObject = MyProtocolBufferObject.newBuilder().setName("bob").build();
byte[] bytes = myObject.toByteArray();

Изменить В вашем примере:

Comment.Builder commentBuilder=Comment.newBuilder();
Comment comment = commentBuilder.setCommentBody("This is the first comment!").setUserId(32433).build();
byte[] bytes = comment.toByteArray();

Обратите внимание, что при вызове метода newBuilder() вы получаете экземпляр Comment.Builder, не экземпляр Comment. Только когда вы вызываете метод build() Comment.Builder, вы получаете экземпляр Comment.

person Rich    schedule 04.03.2011
comment
Шаблон Builder — действительно хороший шаблон, позволяющий избежать создания конструкторов для каждого мыслимого сценария. Вам просто нужно помнить, что на самом деле вы не получите нужный объект, пока не будет вызван метод build() :) - person Rich; 04.03.2011