public Archive(byte src[]) {
		Stream stream = new Stream(src);
		int decompressedSize = stream.get24BitInt();
		int compressedSize = stream.get24BitInt();
		if (compressedSize != decompressedSize) {
			byte dest[] = new byte[decompressedSize];
			Bzip2Decompressor.decompressBuffer(dest, decompressedSize, src, compressedSize, 6);
			finalBuffer = dest;
			stream = new Stream(finalBuffer);
			compressedAsWhole = true;
		} else {
			finalBuffer = src;
			compressedAsWhole = false;
		}
		totalFiles = stream.getUnsignedShort();
		identifiers = new int[totalFiles];
		decompressedSizes = new int[totalFiles];
		compressedSizes = new int[totalFiles];
		offsets = new int[totalFiles];
		int off = stream.offset + totalFiles * 10;
		for (int i = 0; i < totalFiles; i++) {
			identifiers[i] = stream.getInt();
			decompressedSizes[i] = stream.get24BitInt();
			compressedSizes[i] = stream.get24BitInt();
			offsets[i] = off;
			off += compressedSizes[i];
		}
	}