On Mon, Jan 6, 2014 at 5:17 PM, <[email protected]> wrote: > Hi All, > > Quick question (though it may be a little confusing). > > I currently have a Message that looks something like this > > message MyMessage { > > repeated float positions = 1 [packed = true]; > > repeated float normals = 2 [packed = true]; > > // other repeated float fields > > } > > This message has been written to a various files. Unfortunately, if I want > to follow the guidelines outlined in the technique section of the > documentation, I need to change the structure of the file to fit under the > 1 MB per message guideline. The reason being that the message may go over > 1MB depending on how many positions, normals, etc. are in the message and > sometimes it can be very large. > > My solution to the problem is to turn the files from "one message per > file" to a "size delimited series of messages." The new message would be > something like: > > message MyNewMessage > > { > > optional float position = 1; > > optional float normal = 2; > > ///other fields > > } > > The file would then contain something like: > > [varint of the size of the first MyNewMessage] > > [MyNewMessage #1] > > [varint of the size of the second MyNewMessage] > > [MyNewMessage #2] > > ...... > > Conceptually, so far so good. The problems comes when I want to be > backwards compatible (have my code be able to take either "version" of the > file as input). How can I do a test to see if my file has just a message in > it or starts with the varint? Something akin to the pseudo code below > (using C++): > > void DeserializeMyDataFromCodedInput(CodedInputStream* inputStream){ > > if ( able_to_parse_MyMessage_from_stream() ) { > > // Do code that parses from MyMessage > > } else { > > // Do code that parses from the size delimited collection of messages > > } > > } > > It's easy enough to test for parsing failure when trying to parse a > MyMessage from the coded input stream (which really wraps an ifstream > underneath), but how do I put the coded input stream back at the "proper" > position. The docs and code comments aren't that clear (to me at least) as > to what BackUpInputToCurrentPosition()so I'm unsure if that is the right > thing to use. > You can't do that. Why don't you always use size-delimited messages?
> I would prefer not to change file extensions or encode such information in > the filenames if at all possible. > > Thanks for all of the help! > > > -Jonathan > > -- > 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 http://groups.google.com/group/protobuf. > For more options, visit https://groups.google.com/groups/opt_out. > -- 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 http://groups.google.com/group/protobuf. For more options, visit https://groups.google.com/groups/opt_out.
