public static void open(File root)
	{
		System.out.println("Loading cache from " + root + "...");
		System.out.println("----------------------------------");
		try
		{
			File file = new File(root, "main_file_cache.dat");
			datum = new RandomAccessFile(file, "rw").getChannel();
			System.out.println("\tCache found " + file);
			for (int i = 0; i < 254; i++)
			{
				file = new File(root, "main_file_cache.idx" + i);
				if (!file.exists())
				{
					break;
				}
				cache.put(
						i,
						new FileMeta(new RandomAccessFile(file, "rw")
								.getChannel()));
				System.out.println("\t\tFound index " + i + " and built with "
						+ cache.get(i).getArchiveCount() + " archives");
			}
			FileMeta meta = cache.get(0);
			System.out.println("\tBuilding CRC32 table with "
					+ meta.getArchiveCount() + " entries...");
			CRC32 crc = new CRC32();
			int[] checksums = new int[meta.getArchiveCount()];
			checksums[0] = Constants.CLIENT_REVISION;
			for (int i = 1; i < checksums.length; i++)
			{
				FileDescription description = new FileDescription(0, i);
				ByteBuffer buffer = get(description);
				crc.reset();
				crc.update(buffer.array());
				checksums[i] = (int) crc.getValue();
				System.out.println("\t\tEntry " + i
						+ " generated a crc value of " + checksums[i]);
			}
			int hash = 1234;
			for (int i = 0; i < checksums.length; i++)
			{
				hash = (hash << 1) + checksums[i];
			}
			System.out.println("\tUp to date cache hash is " + hash);
			FileStore.meta = ByteBuffer.allocate(4 * (checksums.length + 1));
			for (int i = 0; i < checksums.length; i++)
			{
				FileStore.meta.putInt(checksums[i]);
			}
			FileStore.meta.putInt(hash);
			FileStore.meta.flip();
		}
		catch (FileNotFoundException e)
		{
			e.printStackTrace();
		}
		System.out.println("----------------------------------");
	}