def _checkStreamStart(self):
if self._startChecked:
return
# ok, we've not started yet, either read or write. Start back at prefix start
# the way "tell()/seek()" is written, we might have gotten moved, so we have to reset
self._stream.seek(self._prefixStart)
if self._rawAvailable() < self.PREFIX_SIZE:
self._dataSize = None
else:
magic = self._stream.read(4)
if magic != self.MAGIC:
self._fail("Bad Magic Number at Start")
check = zlib.adler32(magic)
sizeBytes = self._stream.read(4)
size = struct.unpack("!I",sizeBytes)[0]
check = zlib.adler32(sizeBytes, check)
checkBytes = self._stream.read(4)
cmpCheck = struct.unpack("!I", checkBytes)[0]
if cmpCheck != check:
self._fail("Bad Prefix Checksum")
self._dataSize = size
self._startChecked = True
评论列表
文章目录