Read in buffer, it's much faster
Handle reading from file and errors properly