def map_file(cls, fileobj, offset = 0, size = None):
# If no size is given, it's the whole file by default
if size is None:
fileobj.seek(0, os.SEEK_END)
size = fileobj.tell() - offset
# Read the footer
fileobj.seek(offset + size - cls._Footer.size)
values_pos, = cls._Footer.unpack(fileobj.read(cls._Footer.size))
fileobj.seek(offset)
# Map everything
id_mapper = cls.IdMapper.map_file(fileobj, offset, size = values_pos)
value_array = cls.ValueArray.map_file(fileobj, offset + values_pos,
size = size - cls._Footer.size - values_pos)
return cls(value_array, id_mapper)
评论列表
文章目录