code: @SuppressWarnings("unchecked")
      public final V get(String key) {
          V value = mMemCache.get(key);
          if (mDiskCache != null && value == null) {
              Snapshot snapshot = null;
              InputStream in = null;
              try {
                  snapshot = mDiskCache.get(key);
                  if (snapshot != null) {
                      in = snapshot.getInputStream(INDEX_VALUE);
                      byte[] bytes = IOUtils.toByteArray(in);
                      value = mConverter.from(bytes);
                  }
              } catch (IOException e) {
                  System.out.println("Unable to get entry from disk cache. key: "
                          + key);
              } catch (Exception e) {
                  System.out.println("Unable to get entry from disk cache. key: "
                          + key);
              } catch (OutOfMemoryError e) {
                  System.out.println("Unable to get entry from disk cache. key: "
                      + key);
              } finally {
                  IOUtils.closeQuietly(in);
                  IOUtils.closeQuietly(snapshot);
              }
              if (value != null) {
                  // write back to mem cache
                  mMemCache.put(key, value);
              }
          }
          return value;
      }
docs: Returns the value for {@code key} if it exists in the cache or can be
  created by {@code #create(String)}.
  
  @param key
  @return value