If I want to write header+body to an array of bytes (in C++), is the easiest thing to use StringOutputStream, then copy its buffer when finished? I also looked at ArrayOutputStream, but at first read it appears to require knowledge of the output size before constructing the stream. True? Thanks john
On Sat, Jul 7, 2018 at 2:18 PM John Lilley <[email protected]> wrote: > Got it, thanks! > john > > On Sat, Jul 7, 2018 at 2:13 PM Ilia Mirkin <[email protected]> wrote: > >> CodingInputStream/OutputStream have all that. readInt32/etc. >> >> There's no strict advantage... but presumably you're using protobuf to >> make your life easier, and this will make your life easier. (With a >> string, you have to include the length, etc. And if the header ever >> changes and you want to have back/forward compat, it can be >> convenient.) >> >> On Sat, Jul 7, 2018 at 4:03 PM, John Lilley <[email protected]> wrote: >> > Does protobuf include utility methods for direct ser/deser on varint, >> > string, etc? >> > Thanks >> > john >> > >> > On Sat, Jul 7, 2018 at 2:02 PM John Lilley <[email protected]> wrote: >> >> >> >> Thanks! >> >> Given that, is there any advantage to a "header message" as opposed to >> >> just hand-serializing everything in the header? >> >> >> >> >> >> On Sat, Jul 7, 2018 at 12:45 PM Ilia Mirkin <[email protected]> >> wrote: >> >>> >> >>> You need explicit lengths. Usually this is done as <header length >> >>> varint><header><body>. And the header contains the body length in it. >> >>> In Java, there's a CodedInputStream/OutputStream which makes it easy >> >>> to consume fixed lengths (push/popLimit) as well as raw varints (as >> >>> for the initial header length). Other languages have similar >> >>> abstractions. >> >>> >> >>> On Sat, Jul 7, 2018 at 2:26 PM, John Lilley <[email protected]> >> wrote: >> >>> > I am posting protobuf messages to a message broker, and in order to >> >>> > identify >> >>> > them, I prefix the message bytes with the serialized result of a >> >>> > "header" >> >>> > message: >> >>> > >> >>> > message Header { >> >>> > int version = 1; >> >>> > string message_type = 2; >> >>> > } >> >>> > >> >>> > It is easy, to concatenate the header+actual message bytes and post >> the >> >>> > resulting block to a queue. But how do I take these apart on the >> >>> > receiving >> >>> > end? Suppose I get a byte-buffer consisting of: >> >>> > >> >>> > --------------- >> >>> > | header | >> >>> > --------------- >> >>> > | body | >> >>> > --------------- >> >>> > >> >>> > Is it OK to throw this oversized buffer at the Header >> deserialization? >> >>> > Will >> >>> > the extra bytes hurt anything? >> >>> > >> >>> > Then, once I extract the Header message, how do I know where the >> body >> >>> > begins? I could turn around and ask the Header object "how big would >> >>> > you be >> >>> > if serialized?". Is that reliable? Is there a better way? >> >>> > >> >>> > Thanks >> >>> > john >> >>> > >> >>> > -- >> >>> > 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 [email protected]. >> >>> > To post to this group, send email to [email protected]. >> >>> > Visit this group at https://groups.google.com/group/protobuf. >> >>> > For more options, visit https://groups.google.com/d/optout. >> > >> > -- >> > 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 [email protected]. >> > To post to this group, send email to [email protected]. >> > Visit this group at https://groups.google.com/group/protobuf. >> > For more options, visit https://groups.google.com/d/optout. >> > -- 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 [email protected]. To post to this group, send email to [email protected]. Visit this group at https://groups.google.com/group/protobuf. For more options, visit https://groups.google.com/d/optout.
