Optimise isEof
Add canReadBytes function
Create readers on __construct, rather than lazily
Replace getEndian calls with direct access