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.

Reply via email to