hi Adam,
many thanks for the clarification and for sure I will stick to fix-sized type. the whole story was:
- before I write a message to file, I have to write the length of the object first, so I can parse and reconstruct it in memory thru SerializeFromArray(char*, size).
- when I do it, I defined a simple message(containing one single fixed32) to keep track of the length, and you know we must make it a fix-sized type because we have to parse the length itself thru SerializeFromArray which requires a exact correct SIZE!
- so, in my case, I need to tell the size before I parse my size-tracking message before hand in a static way, without breaking my code even
if I got Google Protocolbuf updated someday in the future.
- do you know some good practice to do the serialization? I am not sending and receiving data via network so I do have to keep track of message length myself for every object to be written to the file, and I want both backward and forward compatibility!

thanks and looking forward to hearing form you

all the best,

Charlie Chen,



发自我的小米手机
在 Adam Cozzette <acozze...@google.com>,2016年9月26日 下午6:43写道:

Yes, in your case the serialized size will remain the same because you are using simple fixed-size fields and always initializing them.

There are a few things to watch out for, though:
- If you use proto3 syntax, zero-valued fields will be omitted from the serialized output because zero is the default anyway. (But based on your example you're using proto2, so that's not an issue.)
- Varints of course will be variable sized, so you will have to avoid those and stick to fixed-size types.
- If you parse a message that has any unknown fields then those unknown fields could take up an arbitrary amount of space when you reserialize the message.

On Mon, Sep 26, 2016 at 12:06 PM, <job4char...@gmail.com> wrote:


在 2016年9月26日星期一 UTC-4下午2:57:14,job4c...@gmail.com写道:
Will Google Protocol Buffer ensure this? This is a very important I think.


Notes: My message only uses fixed32 and all fields are initialized(values might vary)

Message test_msg
{
optional fixed32 field1 = 1;
optional fixed32 field2 = 2;
}

test_msg msg;
msg.set_field1(0);
msg.set_field2(1);

int size = msg.ByteSize(); // will this be a fixed length even if I upgrade Google Protocol Buffer? 

--
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 protobuf+unsubscr...@googlegroups.com.
To post to this group, send email to protobuf@googlegroups.com.
Visit this group at https://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.

--
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 protobuf+unsubscr...@googlegroups.com.
To post to this group, send email to protobuf@googlegroups.com.
Visit this group at https://groups.google.com/group/protobuf.
For more options, visit https://groups.google.com/d/optout.

Reply via email to