It's been nearly a decade since I've looked at those APIs closely,
hopefully someone else can elaborate. If what you want is a data
buffer you can then copy somewhere else, you either need something
dynamically sizeable, or just decree what the max size is, and
allocate that. Even better would be to avoid the additional copy, but
perhaps your message broker won't allow that.

On Sat, Jul 7, 2018 at 4:34 PM, John Lilley <whee...@gmail.com> wrote:
> 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 <whee...@gmail.com> wrote:
>>
>> Got it, thanks!
>> john
>>
>> On Sat, Jul 7, 2018 at 2:13 PM Ilia Mirkin <imir...@alum.mit.edu> 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 <whee...@gmail.com> 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 <whee...@gmail.com> 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 <imir...@alum.mit.edu>
>>> >> 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 <whee...@gmail.com>
>>> >>> 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 protobuf+unsubscr...@googlegroups.com.
>>> >>> > To post to this group, send email to protobuf@googlegroups.com.
>>> >>> > 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 protobuf+unsubscr...@googlegroups.com.
>>> > To post to this group, send email to protobuf@googlegroups.com.
>>> > 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 protobuf+unsubscr...@googlegroups.com.
> To post to this group, send email to protobuf@googlegroups.com.
> 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 protobuf+unsubscr...@googlegroups.com.
To post to this group, send email to protobuf@googlegroups.com.
Visit this group at https://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.

Reply via email to