Extracts io to separate file, allows injection of different readers, allows different io types