├── .classpath
├── .gitignore
├── .project
├── .settings
└── org.eclipse.jdt.core.prefs
├── AndroidManifest.xml
├── README.md
├── ic_launcher-web.png
├── libs
├── android-support-v4.jar
└── fastjson-1.1.34.android.jar
├── proguard-project.txt
├── project.properties
├── res
├── drawable-hdpi
│ └── ic_launcher.png
├── drawable-mdpi
│ └── ic_launcher.png
├── drawable-xhdpi
│ └── ic_launcher.png
├── drawable-xxhdpi
│ └── ic_launcher.png
├── layout
│ ├── activity_main.xml
│ └── list_item.xml
├── menu
│ └── main.xml
├── values-sw600dp
│ └── dimens.xml
├── values-sw720dp-land
│ └── dimens.xml
├── values-v11
│ └── styles.xml
├── values-v14
│ └── styles.xml
└── values
│ ├── dimens.xml
│ ├── strings.xml
│ └── styles.xml
└── src
└── com
└── leslie
└── demo
├── AsyncImageLoader.java
├── DiskLruCache.java
├── MainActivity.java
└── MyAdapter.java
/.classpath:
--------------------------------------------------------------------------------
1 |
2 |
The cache stores its data in a directory on the filesystem. This 64 | * directory must be exclusive to the cache; the cache may delete or overwrite 65 | * files from its directory. It is an error for multiple processes to use the 66 | * same cache directory at the same time. 67 | * 68 | *
This cache limits the number of bytes that it will store on the 69 | * filesystem. When the number of stored bytes exceeds the limit, the cache will 70 | * remove entries in the background until the limit is satisfied. The limit is 71 | * not strict: the cache may temporarily exceed it while waiting for files to be 72 | * deleted. The limit does not include filesystem overhead or the cache 73 | * journal so space-sensitive applications should set a conservative limit. 74 | * 75 | *
Clients call {@link #edit} to create or update the values of an entry. An 76 | * entry may have only one editor at one time; if a value is not available to be 77 | * edited then {@link #edit} will return null. 78 | *
Clients call {@link #get} to read a snapshot of an entry. The read will 91 | * observe the value at the time that {@link #get} was called. Updates and 92 | * removals after the call do not impact ongoing reads. 93 | * 94 | *
This class is tolerant of some I/O errors. If files are missing from the
95 | * filesystem, the corresponding entries will be dropped from the cache. If
96 | * an error occurs while writing a cache value, the edit will fail silently.
97 | * Callers should handle other problems by catching {@code IOException} and
98 | * responding appropriately.
99 | */
100 | public final class DiskLruCache implements Closeable {
101 | static final String JOURNAL_FILE = "journal";
102 | static final String JOURNAL_FILE_TMP = "journal.tmp";
103 | static final String MAGIC = "libcore.io.DiskLruCache";
104 | static final String VERSION_1 = "1";
105 | static final long ANY_SEQUENCE_NUMBER = -1;
106 | private static final String CLEAN = "CLEAN";
107 | private static final String DIRTY = "DIRTY";
108 | private static final String REMOVE = "REMOVE";
109 | private static final String READ = "READ";
110 |
111 | private static final Charset UTF_8 = Charset.forName("UTF-8");
112 | private static final int IO_BUFFER_SIZE = 8 * 1024;
113 |
114 | /*
115 | * This cache uses a journal file named "journal". A typical journal file
116 | * looks like this:
117 | * libcore.io.DiskLruCache
118 | * 1
119 | * 100
120 | * 2
121 | *
122 | * CLEAN 3400330d1dfc7f3f7f4b8d4d803dfcf6 832 21054
123 | * DIRTY 335c4c6028171cfddfbaae1a9c313c52
124 | * CLEAN 335c4c6028171cfddfbaae1a9c313c52 3934 2342
125 | * REMOVE 335c4c6028171cfddfbaae1a9c313c52
126 | * DIRTY 1ab96a171faeeee38496d8b330771a7a
127 | * CLEAN 1ab96a171faeeee38496d8b330771a7a 1600 234
128 | * READ 335c4c6028171cfddfbaae1a9c313c52
129 | * READ 3400330d1dfc7f3f7f4b8d4d803dfcf6
130 | *
131 | * The first five lines of the journal form its header. They are the
132 | * constant string "libcore.io.DiskLruCache", the disk cache's version,
133 | * the application's version, the value count, and a blank line.
134 | *
135 | * Each of the subsequent lines in the file is a record of the state of a
136 | * cache entry. Each line contains space-separated values: a state, a key,
137 | * and optional state-specific values.
138 | * o DIRTY lines track that an entry is actively being created or updated.
139 | * Every successful DIRTY action should be followed by a CLEAN or REMOVE
140 | * action. DIRTY lines without a matching CLEAN or REMOVE indicate that
141 | * temporary files may need to be deleted.
142 | * o CLEAN lines track a cache entry that has been successfully published
143 | * and may be read. A publish line is followed by the lengths of each of
144 | * its values.
145 | * o READ lines track accesses for LRU.
146 | * o REMOVE lines track entries that have been deleted.
147 | *
148 | * The journal file is appended to as cache operations occur. The journal may
149 | * occasionally be compacted by dropping redundant lines. A temporary file named
150 | * "journal.tmp" will be used during compaction; that file should be deleted if
151 | * it exists when the cache is opened.
152 | */
153 |
154 | private final File directory;
155 | private final File journalFile;
156 | private final File journalFileTmp;
157 | private final int appVersion;
158 | private final long maxSize;
159 | private final int valueCount;
160 | private long size = 0;
161 | private Writer journalWriter;
162 | private final LinkedHashMap