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;
 }