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.

Reply via email to