code: protected final void serializeTo( RawDataBuffer out )
      {
      	// Level 1 - Always unserialized
      	byte lvl1Flags = (byte)((priority & 0x0F)+
      	                        (redelivered ? (1 << 4) : 0)+
      	                        (deliveryMode == DeliveryMode.PERSISTENT ? (1 << 5) : 0)+
      	                        (expiration != 0 ? (1 << 6) : 0)+ // Expiration value present
      	                        (id != null ? (1 << 7) : 0)); // ID value present
      	out.writeByte(lvl1Flags);
      	if (expiration != 0)
      		out.writeLong(expiration);
      	if (id != null)
      		out.writeUTF(id);
      	DestinationSerializer.serializeTo(destination, out);
      	
          // Level 2 - Unserialized if required by a message selector
      	byte lvl2Flags = (byte)((correlId != null ? (1 << 0) : 0)+
      	                        (replyTo != null ? (1 << 1) : 0)+
      	                        (timestamp != 0 ? (1 << 2) : 0)+
      	                        (type != null ? (1 << 3) : 0)+
      	                        (propertyMap != null && !propertyMap.isEmpty() ? (1 << 4) : 0));
      	out.writeByte(lvl2Flags);
      	if (correlId != null)
      		out.writeUTF(correlId);
      	if (replyTo != null)
      		DestinationSerializer.serializeTo(replyTo, out);
      	if (timestamp != 0)
      		out.writeLong(timestamp);
      	if (type != null)
      		out.writeUTF(type);
      	if (propertyMap != null && !propertyMap.isEmpty())
      		writeMapTo(propertyMap, out);
          
          // Level 3 - Body - Only unserialized on the client side
          serializeBodyTo(out);
      }
docs: Write the message content to the given output stream