Christopher, Sorry for late reply. I was traveling. Above code worked fine with my example. Later I found this in the documentation also. My bad. Thanks for your help. Still in the process to understand protocol buffers usage.
On Dec 10, 3:42 am, Christopher Head <hea...@gmail.com> wrote: > Protobuf messages are not aware of their own sizes, and you haven't > told the input stream how many bytes of message it should consume. Try > this: > > coded_input->ReadLittleEndian32(&objtype); > coded_input->ReadLittleEndian32(&objlen); > CodedInputStream::Limit lim = coded_input->PushLimit(objlen); > tMsg.ParseFromCodedStream(coded_input); > coded_input->PopLimit(lim); > > (Note, untested, just I think this is your problem). > > Chris > > On Thu, 8 Dec 2011 22:48:25 -0800 (PST) > > > > > > > > alok <alok.jad...@gmail.com> wrote: > > I created a binary file using a c++ program using protocol buffers. I > > had issues reading the binary file in my C# program, so I decided to > > write a small c++ program to test the reading. > > > My proto file is as follows > > > message TradeMessage { > > required double timestamp = 1; > > required string ric_code = 2; > > required double price = 3; > > required int64 size = 4; > > required int64 AccumulatedVolume = 5; > > } > > > When writing to protocol buffer, I first write the object type, then > > object length and the object itself. > > > coded_output->WriteLittleEndian32((int) ObjectType_Trade); > > coded_output->WriteLittleEndian32(trade.ByteSize()); > > trade.SerializeToCodedStream(coded_output); > > > Now, when I am trying to read the same file in my c++ program i see > > strange behavior. > > > My reading code is as follows: > > > coded_input->ReadLittleEndian32(&objtype); > > coded_input->ReadLittleEndian32(&objlen); > > tMsg.ParseFromCodedStream(coded_input); > > cout << "Expected Size = " << objlen << endl; > > cout<<" Trade message received for: "<< tMsg.ric_code() << endl; > > cout << "TradeMessage Size = " << tMsg.ByteSize() << endl; > > > In this case, i get following output > > > Expected Size = 33 > > Trade message received for: .CSAP0104 > > TradeMessage Size = 42 > > > When I write to file, I write trade.ByteSize() as 33 bytes, but when I > > read the same object, the object ByteSize() is 42 bytes i.e. it is > > trying to read 42 bytes. But it should be trying to read 33 bytes. > > This affects the rest of the fiel reading. I am not sure what is wrong > > in this. Please advice. > > > just to double check.. I compared the protocol buffer generated files > > in my reader and writer projects. The generated files are identical. > > So I guess, the file coding is different for some reason. I do not > > understand why it is different. > > > Regards, > > Alok > > > Regards, Alok -- 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.