MCPcopy Index your code
hub / github.com/boazy/TWEditorEnhanced / readFile

Method readFile

src/main/java/KeyDatabase.java:31–103  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

29 }
30
31 private void readFile()
32 throws DBException, IOException
33 {
34 RandomAccessFile in = new RandomAccessFile(this.file, "r");
35
36 byte[] header = new byte[68];
37 int count = in.read(header);
38 if (count != header.length) {
39 throw new DBException("KEY header length is incorrect");
40 }
41 String signature = new String(header, 0, 4);
42 if (!signature.equals("KEY ")) {
43 throw new DBException("KEY header signature is incorrect");
44 }
45 String version = new String(header, 4, 4);
46 if (!version.equals("V1.1")) {
47 throw new DBException("KEY header version " + version + " is not supported");
48 }
49 int fileCount = getInteger(header, 8);
50 long fileOffset = getInteger(header, 20);
51 int keyCount = getInteger(header, 12);
52 long keyOffset = getInteger(header, 24);
53
54 this.archiveNames = new ArrayList(fileCount);
55 byte[] fileBuffer = new byte[12];
56 byte[] nameBuffer = new byte[256];
57 for (int i = 0; i < fileCount; i++) {
58 in.seek(fileOffset);
59 count = in.read(fileBuffer);
60 if (count != fileBuffer.length) {
61 throw new DBException("File table truncated");
62 }
63 long nameOffset = getInteger(fileBuffer, 4);
64 int nameLength = getInteger(fileBuffer, 8);
65 if (nameLength > nameBuffer.length) {
66 nameBuffer = new byte[nameLength];
67 }
68 in.seek(nameOffset);
69 in.read(nameBuffer, 0, nameLength);
70 String fileName = new String(nameBuffer, 0, nameLength);
71 this.archiveNames.add(fileName);
72
73 fileOffset += 12L;
74 }
75
76 this.keyEntries = new ArrayList(keyCount);
77 this.keyEntriesMap = new HashMap(keyCount);
78 byte[] keyBuffer = new byte[26];
79 for (int i = 0; i < keyCount; i++) {
80 in.seek(keyOffset);
81 count = in.read(keyBuffer);
82 if (count != keyBuffer.length) {
83 throw new DBException("Key table truncated");
84 }
85 int nameLength;
86 for (nameLength = 1; (nameLength < 16) &&
87 (keyBuffer[nameLength] != 0); nameLength++);
88 String resourceName = new String(keyBuffer, 0, nameLength);

Callers 1

KeyDatabaseMethod · 0.95

Calls 6

getIntegerMethod · 0.95
getShortMethod · 0.95
getFileNameMethod · 0.95
readMethod · 0.45
equalsMethod · 0.45
closeMethod · 0.45

Tested by

no test coverage detected