Parse/Decode raw protobuf msg

3,153 views
Skip to first unread message

Rohan Suri

unread,
Apr 19, 2017, 7:20:10 AM4/19/17
to Protocol Buffers
Hello everyone,

I'm trying to find the right Java APIs to do what protoc --decode_raw and protoc --decode do.
Essentially handling two cases:
1) When I don't have the proto, and only the raw protobuf msg.
eg protoc --decode_raw < rawmsg.bin

1: "rohan"
2 {
    1: "13"
    2: "08"
    3: "94"
}

2) When I have the .proto(not the generated classes, neither the parsed .proto)
eg protoc --decode some.pkg.name.Person $proto_file_path < rawmsg.bin

name: "rohan"
dob {
     dd: "13"
     mm: "08"
     yy: "94"
}

I did dig google groups.

From those the hints I've got is
For case 1) Using CodedInputStream write my own parser? parsing bytes by making informed guesses.


For case 2) well nothing. Everything I got assumed I have FileDescriptorProto for my .proto or instance of my message type.

Are there any add-on libraries present to handle these scenarios?
Or any logic to go about solving them?

Thanks.


Feng Xiao

unread,
Apr 19, 2017, 1:30:17 PM4/19/17
to Rohan Suri, Protocol Buffers
2) requires parsing .proto files and that parser is in C++ only. 

Are there any add-on libraries present to handle these scenarios?
Or any logic to go about solving them?

Thanks.


--
You received this message because you are subscribed to the Google Groups "Protocol Buffers" group.
To unsubscribe from this group and stop receiving emails from it, send an email to protobuf+unsubscribe@googlegroups.com.
To post to this group, send email to prot...@googlegroups.com.
Visit this group at https://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.

Rohan Suri

unread,
Apr 19, 2017, 1:39:09 PM4/19/17
to Protocol Buffers, rohan....@gmail.com
Hey Feng, thanks for your input.

Any suggestions for 1) ? Other than using CodingInputStream?

Also is it bad practise to invoke protoc compiler in a production environment?
To unsubscribe from this group and stop receiving emails from it, send an email to protobuf+u...@googlegroups.com.

Feng Xiao

unread,
Apr 19, 2017, 2:13:42 PM4/19/17
to Rohan Suri, Protocol Buffers
CodedInputStream is the right one to use for 1.

Invoking protoc compiler in production sounds problematic to me, though I'm not aware of any document listing it explicitly as bad practice. I would suggest avoid that and use other alternatives. For example, in Google we build a protodb which contains FileDescriptorProto of all transitively depended .proto files and use that instead of actual .proto files.

To unsubscribe from this group and stop receiving emails from it, send an email to protobuf+unsubscribe@googlegroups.com.

Rohan Suri

unread,
Apr 19, 2017, 4:26:14 PM4/19/17
to Protocol Buffers, rohan....@gmail.com
You create a descriptor by using --descriptor_set_out right?
Followed by creating FileDescriptorProto by using parseFrom(FileInputStream)?

Feng Xiao

unread,
Apr 19, 2017, 9:08:12 PM4/19/17
to Rohan Suri, Protocol Buffers
On Wed, Apr 19, 2017 at 1:26 PM, Rohan Suri <rohan....@gmail.com> wrote:
You create a descriptor by using --descriptor_set_out right?
That's right. You can make that part of your build process and embed the generated data file into your binary however you want.
To unsubscribe from this group and stop receiving emails from it, send an email to protobuf+unsubscribe@googlegroups.com.

Rohan Suri

unread,
Apr 23, 2017, 5:59:49 AM4/23/17
to Protocol Buffers, rohan....@gmail.com
Thanks a lot Feng :)
Reply all
Reply to author
Forward
0 new messages