public static synchronized boolean init() {
        if (!loaded) {
            if (!checkFiles() && !updateFiles()) {
                return false;
            }
            FileInputStream indexStream = null;
            try {
                indexStream = new FileInputStream(INDEX);
                byte[] bytes = new byte[12];
                while (indexStream.read(bytes) != -1) {
                    ByteBuffer buffer = ByteBuffer.wrap(bytes);
                    RegionData data = new RegionData(buffer.getInt(), buffer.getInt(), buffer.getInt());
                    REGION_DATA_MAP.put(data.getHash(), data);
                }
            } catch (Exception e) {
                e.printStackTrace();
                return false;
            } finally {
                if (indexStream != null) {
                    try {
                        indexStream.close();
                    } catch (IOException e) {
                    }
                }
            }
            loaded = true;
        }
        return true;
    }