still not pretty, but buffered reading makes a 6x speed increase