public override void Write(double value)
        {
            var doubleUnion = new ExtendedBinary.DoubleUnion(value);

            if (IsBigEndian)
            {
                dataBuffer[0] = (byte)(doubleUnion.ULong >> 56);
                dataBuffer[1] = (byte)(doubleUnion.ULong >> 48);
                dataBuffer[2] = (byte)(doubleUnion.ULong >> 40);
                dataBuffer[3] = (byte)(doubleUnion.ULong >> 32);

                dataBuffer[4] = (byte)(doubleUnion.ULong >> 24);
                dataBuffer[5] = (byte)(doubleUnion.ULong >> 16);
                dataBuffer[6] = (byte)(doubleUnion.ULong >> 8);
                dataBuffer[7] = (byte)(doubleUnion.ULong);
            }
            else
            {
                dataBuffer[0] = (byte)(doubleUnion.ULong);
                dataBuffer[1] = (byte)(doubleUnion.ULong >> 8);
                dataBuffer[2] = (byte)(doubleUnion.ULong >> 16);
                dataBuffer[3] = (byte)(doubleUnion.ULong >> 24);

                dataBuffer[4] = (byte)(doubleUnion.ULong >> 32);
                dataBuffer[5] = (byte)(doubleUnion.ULong >> 40);
                dataBuffer[6] = (byte)(doubleUnion.ULong >> 48);
                dataBuffer[7] = (byte)(doubleUnion.ULong >> 56);
            }

            Write(dataBuffer, 0, 8);
        }
        public override double ReadDouble()
        {
            var buffer      = ReadBytes(8);
            var doubleUnion = new ExtendedBinary.DoubleUnion();

            if (IsBigEndian)
            {
                doubleUnion.ULong = (
                    (ulong)buffer[0] << 56 | (ulong)buffer[1] << 48 |
                        (ulong)buffer[2] << 40 | (ulong)buffer[3] << 32 |
                        (ulong)buffer[4] << 24 | (ulong)buffer[5] << 16 |
                        (ulong)buffer[6] << 8 | buffer[7]);
            }
            else
            {
                doubleUnion.ULong = (
                    (ulong)buffer[7] << 56 | (ulong)buffer[6] << 48 |
                        (ulong)buffer[5] << 40 | (ulong)buffer[4] << 32 |
                        (ulong)buffer[3] << 24 | (ulong)buffer[2] << 16 |
                        (ulong)buffer[1] << 8 | buffer[0]);
            }

            return(doubleUnion.Double);
        }