use a buffered reader