protected function readLong()
    {
        // First of all, read 8 bytes, divided into hi and low parts
        $hi = unpack('N', $this->readRaw(4));
        $hi = reset($hi);
        $low = unpack('N', $this->readRaw(4));
        $low = reset($low);
        // Unpack 64-bit signed long
        return self::unpackI64($hi, $low);
    }