Beispiel #1
0
 def _read_header(self):
     offset = Bit.u32_from(self._fp.read(4))
     self._fp.seek(offset)
     # 读取秘钥
     keylen = self._fp.read(1)[0]
     if keylen > 0:
         self._parser = self.Parser(keylen)
         self._parser.load(self._fp.read(keylen + 4))
     # 读取hash种子和文件数量
     buffer = self._fp.read(4)
     self._hseed = Bit.u16_from(buffer)
     filenum = Bit.u16_from(buffer[2:])
     # 读取文件表
     buffer = self._fp.read(filenum * 12)  # tag+pos+len=12
     offset = 0
     self._hashmap = {}
     for i in range(filenum):
         tag = Bit.u32_from(buffer[offset:offset + 4])
         offset += 4
         pos = Bit.u32_from(buffer[offset:offset + 4])
         offset += 4
         size = Bit.u32_from(buffer[offset:offset + 4])
         offset += 4
         self._hashmap[tag] = (pos, size)
     log.d('unpack bale files:', filenum)
Beispiel #2
0
 def _out_pkg(self, build_look_map):
     if not os.path.isdir(self._ulo_path):
         os.makedirs(self._ulo_path)
     for excel_name, sheet_dict in self._new_dict.items():
         ba = Bit.ByteArray().init_capacity(1024 * 1024 * 8)
         ba.set_position(2)
         sheet_nums = self._build_buf(excel_name, sheet_dict, ba)
         ba.set_position(0).write_u16(sheet_nums)  # 写入表的数量
         with open(os.path.join(self._ulo_path, excel_name + '.ulo'),
                   'wb') as fp:
             fp.write(ba.slim_buffer())
     total_nums = 0
     for name in os.listdir(self._ulo_path):
         ulofile = os.path.join(self._ulo_path, name)
         if FS.filename(name) not in build_look_map:
             log.w('删除表文件:', ulofile)
             os.remove(ulofile)
         else:
             with open(ulofile, 'rb') as fp:
                 total_nums += Bit.u16_from(fp.read(2))
     return total_nums