> No.  Again, this requires knowing the proto definition.  There's no way to
> distinguish between packed arrays and byte blobs given only the encoded
> message.

So if I know that a given byte blob is actually a packed array, how
can I decode it without having a precompiled proto definition?
The byte blob in question wouldn't be a complete message, so I can't
use UnknownFieldSet.parseFrom(), can I?
(unlike embedded messages)

On Jun 25, 1:46 am, Kenton Varda <ken...@google.com> wrote:
> On Wed, Jun 24, 2009 at 6:15 AM, Toph <clo...@gmail.com> wrote:
>
> > Thanks for the reply Kenton.
>
> > Yes I discovered UnknownFieldSet, although it (and thus its toString
> > () ) isn't able to recurse down a tree of embedded messages stored in
> > length-delimited values (as far as I can see), so I've written a
> > recursive method to do just that (which has to try to parse such a
> > value in order to determine if it is an embedded message, or just a
> > bunch of bytes/text).
>
> Right, there is no way to distinguish between embedded messages and byte
> blobs without having the proto definition.
>
> I believe the C++ TextFormat code heuristically detects embedded messages
> when printing unknown fields, the same way you do.  I don't think that's
> been ported to Java, though.
>
> > Is UnknownFieldSet able to handle packed repeated fields correctly and
> > parse them out of the length delimited value into one of the
> > UnknownFieldSet.Field.get*List() Lists, as opposed to just leaving
> > them packed in the value (as it does with embedded messages) ?  I
> > assume so, but haven't tried it.
>
> No.  Again, this requires knowing the proto definition.  There's no way to
> distinguish between packed arrays and byte blobs given only the encoded
> message.
>
> > I'm ok with the interface changing in a future version as long as it
> > supports extracting all of the data that it does today.
>
> Yes, it will contain all the same data, but it will no longer group the data
> by field number.  Instead it will just have an array of number/value pairs
> in arbitrary order (with groups still represented as embedded
> UnknownFieldSets).
>
>
>
>
>
> > On Jun 24, 2:12 am, Kenton Varda <ken...@google.com> wrote:
> > > You can use UnknownFieldSet, but be warned that the interface for that
> > class
> > > is likely to change in a future version (because the current design is
> > > somewhat inefficient).  If you just want to print the contents, you
> > should
> > > be fine -- just parse into an UnknownFieldSet and then call its
> > toString()
> > > method.  Those parts won't change.
>
> > > On Tue, Jun 23, 2009 at 7:46 AM, Toph <clo...@gmail.com> wrote:
>
> > > > Hi folks,
>
> > > > I understand that protocol buffers messages are not fully self-
> > > > describing.
> > > > However, the message contains the field number, wire type, and value,
> > > > right?
>
> > > > In Java, how can I take a byte[] (array of bytes) that represents a
> > > > message and deserialize it into a list of tuples that contain the
> > > > field number, wire type, and value?  I really just want to print out
> > > > these tuples, even if the value is binary.
>
> > > > Do any of the classes i the Java API provide a mechanism to do this?
> > > > I know I could just take the documentation of the encoding and write
> > > > code myself, but I am hoping that one of the API classes exists in a
> > > > usable or near-usable form to do this for me.  Will CodedInputStream
> > > > do it?  Can I use any of the parseFrom() or mergeFrom() methods?
>
> > > > Note that I do not have the corresponding .proto file in source form,
> > > > compiled form, or available to transmit along with any messages
>
> > > > Thanks
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To post to this group, send email to protobuf@googlegroups.com
To unsubscribe from this group, send email to 
protobuf+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/protobuf?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to