/// <summary>
        /// Loads the data for the specified identifier using the specified serializable data inteface object.
        /// </summary>
        /// <param name="serializableData">The serializable data.</param>
        /// <param name="id">The identifier.</param>
        private static byte[] Load(ISerializableData serializableData, string id)
        {
            byte[] data = serializableData.LoadData(id);

            if (data == null)
            {
                Log.Debug(typeof(BinaryData), "Load", id, "-");
                return(null);
            }

            Log.Debug(typeof(BinaryData), "Load", id, data.Length);

            if (data.Length > 0)
            {
                if (data.Length < 2)
                {
                    throw new InvalidOperationException("Serialized data corruption");
                }

                if (!FletcherChecksum.Validate(data, 0, data.Length))
                {
                    throw new InvalidOperationException("Serialized data corruption");
                }

                Array.Resize(ref data, data.Length - 2);
            }

            return(data);
        }
        /// <summary>
        /// Checks a local checksum using error-correction check-bytes.
        /// </summary>
        /// <returns>True if the checksum is valid.</returns>
        public void CheckLocalCheckSum()
        {
            this.AssureLeft(2);
            this.index += 2;

            if (!FletcherChecksum.Validate(this.serializedData, this.localCheckSumIndex, this.index))
            {
                this.DeserializationError = true;
                throw new InvalidOperationException("Serialized data corruption!");
            }
        }