public static DiskLruCache open(File directory, int appVersion, int valueCount, long maxSize) throws IOException { if (maxSize <= 0) { throw new IllegalArgumentException("maxSize <= 0"); } if (valueCount <= 0) { throw new IllegalArgumentException("valueCount <= 0"); } // If a bkp file exists, use it instead. File backupFile = new File(directory, JOURNAL_FILE_BACKUP); //判断是否存在journal.bkp文件 if (backupFile.exists()) { //journal.bkp文件存在 则判断journal是否存在 File journalFile = new File(directory, JOURNAL_FILE); // If journal file also exists just delete backup file. //如果journal存在,删除journal.bkp if (journalFile.exists()) { backupFile.delete(); } else { //不存在journal文件,则重命名journal.bkp为journal renameTo(backupFile, journalFile, false); } } // Prefer to pick up where we left off. //创建DiskLruCache DiskLruCache cache = new DiskLruCache(directory, appVersion, valueCount, maxSize); //如果journalFile存在则调用readJournal读取数据 if (cache.journalFile.exists()) { try { cache.readJournal(); cache.processJournal(); return cache; } catch (IOException journalIsCorrupt) { System.out .println("DiskLruCache " + directory + " is corrupt: " + journalIsCorrupt.getMessage() + ", removing"); cache.delete(); } } // Create a new empty cache. directory.mkdirs(); cache = new DiskLruCache(directory, appVersion, valueCount, maxSize); //如果journalFile不存在调用rebuildJournal方法。 cache.rebuildJournal(); return cache;}