public unsafe long ReadInt64()
        {
            const int ValueSize = sizeof(long);

            EnsureSufficientSizeRemaining(ValueSize);

            long result;

            fixed(byte *ptr = &Buffer[Position])
            result = *(long *)ptr;

            Position += ValueSize;

            return(EndiannessConverter.Convert(result, Endianness));
        }
        public unsafe Guid ReadGuid()
        {
            const int ValueSize = 16;

            EnsureSufficientSizeRemaining(ValueSize);

            Guid result;

            fixed(byte *ptr = &Buffer[Position])
            result = *(Guid *)ptr;

            Position += ValueSize;

            return(EndiannessConverter.Convert(result, Endianness));
        }
        public unsafe short ReadInt16()
        {
            const int ValueSize = sizeof(short);

            EnsureSufficientSizeRemaining(ValueSize);

            short result;

            fixed(byte *ptr = &Buffer[Position])
            result = *(short *)ptr;

            Position += ValueSize;

            return(EndiannessConverter.Convert(result, Endianness));
        }
        public unsafe double ReadDouble()
        {
            const int ValueSize = sizeof(double);

            EnsureSufficientSizeRemaining(ValueSize);

            double result;

            fixed(byte *ptr = &Buffer[Position])
            result = *(double *)ptr;

            Position += ValueSize;

            return(EndiannessConverter.Convert(result, Endianness));
        }