New reader and moved to new file

Further reduced the amount needed read operations by creating
an offset dependent cache, e.g. an array for a specific memory range.