예제 #1
0
 /**
  * 读取文件列表
  *
  * @param dis
  * @param fileTableNumber
  * @return
  * @throws Exception
  */
 public static LPKTable[] readLPKTable(DataInputStream dis, int fileTableNumber) throws Exception {
   LPKTable[] fileTable = new LPKTable[fileTableNumber];
   for (int i = 0; i < fileTableNumber; i++) {
     LPKTable ft = new LPKTable();
     ft.setFileName(readByteArray(dis, LPKHeader.LF_FILE_LENGTH));
     ft.setFileSize(dis.readLong());
     ft.setOffSet(dis.readLong());
     fileTable[i] = ft;
   }
   return fileTable;
 }
예제 #2
0
 /**
  * 读取数据流
  *
  * @param dis
  * @param header
  * @param fileTable
  * @return
  * @throws Exception
  */
 public static byte[] readFileFromPak(DataInputStream dis, LPKHeader header, LPKTable fileTable)
     throws Exception {
   dis.skip(fileTable.getOffSet() - outputOffset(header));
   int fileLength = (int) fileTable.getFileSize();
   byte[] fileBuff = new byte[fileLength];
   int readLength = dis.read(fileBuff, 0, fileLength);
   if (readLength < fileLength) {
     return null;
   } else {
     makeBuffer(fileBuff, readLength);
     return fileBuff;
   }
 }
예제 #3
0
 /**
  * 获得指定头文件的偏移长度
  *
  * @param header
  * @return
  */
 public static long outputOffset(LPKHeader header) {
   return LPKHeader.size() + header.getTables() * LPKTable.size();
 }