protected virtual byte [] ReadBytesFromStream(uint pos)
        {
            int start, length = Utilities.ReadCompressedInteger(m_data, (int)pos, out start);

            byte [] buffer = new byte [length];
            Buffer.BlockCopy(m_data, start, buffer, 0, length);
            return(buffer);
        }
        string ReadStringAt(int offset)
        {
            int length = Utilities.ReadCompressedInteger(this.Data, offset, out offset);

            if (length == 0)
            {
                return(string.Empty);
            }

            return(Encoding.Unicode.GetString(this.Data, offset, length));
        }
        string ReadStringAt(int offset)
        {
            int length = Utilities.ReadCompressedInteger(this.Data, offset, out offset) - 1;

            if (length < 1)
            {
                return(string.Empty);
            }

            char [] chars = new char [length / 2];

            for (int i = offset, j = 0; i < offset + length; i += 2)
            {
                chars [j++] = (char)(Data [i] | (Data [i + 1] << 8));
            }

            return(new string (chars));
        }