Rename read() to getContent() and cache the content
Implement getMimeType() method