static md5OfFile_cached_interval = 10*60000; // forget after 10 minutes static Map> md5OfFile_cached_map = syncExpiringMap(md5OfFile_cached_interval); // pair(lastModified, md5) sS md5OfFile_cached(File f) { if (f == null) null; if (!f.exists()) ret md5OfFile(f); Pair p = md5OfFile_cached_map.get(f); long modTime = lastModified(f); if (!eq(pairB(p), modTime)) md5OfFile_cached_map.put(f, p = pair(modTime, md5OfFile(f))); ret p.b; }