Re: [protobuf] Serialized Message Field Order

2010-07-06 Thread Srivats P
@evan: That's what I'm doing currently - serializing and writing the
bytestream for the magic, checksum and actual content messages
separately and in that order - I was just wondering if I could put
them all into one message { ... } and just serialize one message
instead of three.

- Srivats

On Mon, Jul 5, 2010 at 5:56 PM, Evan Jones ev...@mit.edu wrote:
 On Jul 5, 2010, at 7:25 , Srivats P wrote:

 when a message is serialized its known fields should be written
 sequentially by field number, as in the provided C++, Java, and Python
 serialization code
 /quote

 Like the encoded wire format, is the above guaranteed for the C++
 Serialization API (assuming no unknown fields)?

 The official protobuf C++, Java, and Python implementations all write the
 fields out in tag number order (lowest to highest). However, their parsers
 handle messages where the fields are out of order.


 I'm designing a file format based on protobuf. I plan to have the
 first field as a fixed size file type magic value and second field as
 a fixed size checksum value, followed by other fields. While opening
 such a file, I'd like to match the magic value and verify the
 checksum, before parsing the whole file.

 From this description, it doesn't sound like the field order matters?
 Serialize the protocol buffer, compute the checksum, then write out the
 (magic bytes)(checksum)(protocol buffer bytes)?

 Evan

 --
 Evan Jones
 http://evanjones.ca/



-- 
You received this message because you are subscribed to the Google Groups 
Protocol Buffers group.
To post to this group, send email to proto...@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.



Re: [protobuf] Serialized Message Field Order

2010-07-06 Thread Evan Jones

On Jul 6, 2010, at 7:33 , Srivats P wrote:

@evan: That's what I'm doing currently - serializing and writing the
bytestream for the magic, checksum and actual content messages
separately and in that order - I was just wondering if I could put
them all into one message { ... } and just serialize one message
instead of three.


Well, the checksum must be a separate message from the content,  
since you need the content bytes in order to compute the checksum. At  
least with the official implementation. But you could use the  
content message for the magic bytes part.


I would just use a CodedOutputStream/CodedInputStream directly to do  
this, with something like the following:


CodedOutputStream out = ...;
ByteString msgBytes = msg.toByteString();
byte[] checksum = computeChecksum(msgBytes);
out.writeRawBytes(magicBytes);
out.writeRawBytes(checksum);
out.writeBytesNoTag(msgBytes);

--
Evan Jones
http://evanjones.ca/

--
You received this message because you are subscribed to the Google Groups Protocol 
Buffers group.
To post to this group, send email to proto...@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] Serialized Message Field Order

2010-07-05 Thread Srivats P
Hi,

From http://code.google.com/apis/protocolbuffers/docs/encoding.html
quote
when a message is serialized its known fields should be written
sequentially by field number, as in the provided C++, Java, and Python
serialization code
/quote

Like the encoded wire format, is the above guaranteed for the C++
Serialization API (assuming no unknown fields)?

Background:
I'm designing a file format based on protobuf. I plan to have the
first field as a fixed size file type magic value and second field as
a fixed size checksum value, followed by other fields. While opening
such a file, I'd like to match the magic value and verify the
checksum, before parsing the whole file.

Regards,
Srivats

-- 
You received this message because you are subscribed to the Google Groups 
Protocol Buffers group.
To post to this group, send email to proto...@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.



Re: [protobuf] Serialized Message Field Order

2010-07-05 Thread Marc Gravell
From the encoding spec, it is required (or at least: recommended) to handle
out-of-order fields. I guess *in part* this helps with message
concatenation. I also know of at least one case where I knowingly emit
fields out of order (in my implementation; not related to the core Google
implementation).

Marc

On 5 July 2010 12:25, Srivats P pstav...@gmail.com wrote:

 Hi,

 From http://code.google.com/apis/protocolbuffers/docs/encoding.html
 quote
 when a message is serialized its known fields should be written
 sequentially by field number, as in the provided C++, Java, and Python
 serialization code
 /quote

 Like the encoded wire format, is the above guaranteed for the C++
 Serialization API (assuming no unknown fields)?

 Background:
 I'm designing a file format based on protobuf. I plan to have the
 first field as a fixed size file type magic value and second field as
 a fixed size checksum value, followed by other fields. While opening
 such a file, I'd like to match the magic value and verify the
 checksum, before parsing the whole file.

 Regards,
 Srivats

 --
 You received this message because you are subscribed to the Google Groups
 Protocol Buffers group.
 To post to this group, send email to proto...@googlegroups.com.
 To unsubscribe from this group, send email to
 protobuf+unsubscr...@googlegroups.comprotobuf%2bunsubscr...@googlegroups.com
 .
 For more options, visit this group at
 http://groups.google.com/group/protobuf?hl=en.




-- 
Regards,

Marc

-- 
You received this message because you are subscribed to the Google Groups 
Protocol Buffers group.
To post to this group, send email to proto...@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.