/** * 读取文件列表 * * @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; }
/** * 读取数据流 * * @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; } }
/** * 获得指定头文件的偏移长度 * * @param header * @return */ public static long outputOffset(LPKHeader header) { return LPKHeader.size() + header.getTables() * LPKTable.size(); }