keep a cache of the reader methods so we can reuse them
move the reader method cache in to the read module
keep a cache of writer methods