'A double is written as 8 bytes.
The double is converted into a 64-bit integer using a method equivalent to
Java\'s doubleToLongBits and then encoded in little-endian format.'

def read_double(self):

    bits = ((((((((ord(self.read(1)) & 255L) | ((ord(self.read(1)) & 255L) << 8)) | ((ord(self.read(1)) & 255L) << 16)) | ((ord(self.read(1)) & 255L) << 24)) | ((ord(self.read(1)) & 255L) << 32)) | ((ord(self.read(1)) & 255L) << 40)) | ((ord(self.read(1)) & 255L) << 48)) | ((ord(self.read(1)) & 255L) << 56))
    return STRUCT_DOUBLE.unpack(STRUCT_LONG.pack(bits))[0]
