Re: [protobuf] Why protocol buffer c++ library not reading binary objects properly?

2011-12-09 Thread Christopher Head
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.



[protobuf] Why protocol buffer c++ library not reading binary objects properly?

2011-12-08 Thread alok
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.