private void initIndexContent(DataInputStream in) throws IOException { try { while (true) { char flag = (char) in.readByte(); String key = in.readUTF(); if (flag == DELETE) { lruEntries.remove(key); return; } DiskLruCacheEntry entry = lruEntries.get(key); if (entry == null) { entry = new DiskLruCacheEntry(this, key); lruEntries.put(key, entry); } switch (flag) { case CLEAN: entry.size = in.readInt(); break; case UPDATE: case WRITE: entry.clean(); // reset to clean or deleted break; case READ: // this work was already done by calling lruEntries.get() break; default: throw new IOException("unexpected index line: " + flag + ":" + key); } } } catch (EOFException e) { // end } }
/* (non-Javadoc) * @see org.xidea.android.impl.io.DiskLruCacheIF#close() */ @Override public synchronized void close() throws IOException { if (indexWriter == null) { return; // already closed } for (final DiskLruCacheEntry entry : new ArrayList<DiskLruCacheEntry>(lruEntries.values())) { entry.clean(); } trimToSize(); indexWriter.close(); indexWriter = null; }