private void readJournalLine(String line) throws IOException {
        String[] parts = line.split(" ");
        if (parts.length < 2) {
            throw new IOException("unexpected journal line: " + line);
        }

        String key = parts[1];
        if (parts[0].equals(REMOVE) && parts.length == 2) {
            lruEntries.remove(key);
            return;
        }

        Entry entry = lruEntries.get(key);
        if (entry == null) {
            entry = new Entry(key);
            lruEntries.put(key, entry);
        }

        if (parts[0].equals(CLEAN) && parts.length == 2 + valueCount) {
            entry.readable = true;
            entry.currentEditor = null;
            entry.setLengths(copyOfRange(parts, 2, parts.length));
        } else if (parts[0].equals(DIRTY) && parts.length == 2) {
            entry.currentEditor = new Editor(entry);
        } else if (parts[0].equals(READ) && parts.length == 2) {
            // this work was already done by calling lruEntries.getBitmapForVisualizer()
        } else {
            throw new IOException("unexpected journal line: " + line);
        }
    }
Opens the cache in {@code directory}, creating a cache if none exists
there.

@param directory a writable directory
@param appVersion
@param valueCount the number of values per cache entry. Must be positive.
@param maxSize the maximum number of bytes this cache should use to store
@throws java.io.IOException if reading or writing the cache directory fails
app/src/main/java/com/duan/musicoco/cache/DiskLruCache.java