It seems to me a single interface:

public interface ResourceContent<T> {
  T read(Resource r);
} 

could replace both of Content and Content.Read and be simpler to understand (in the case of caching, you just don't open the resource stream).