rename _download() to _read() to make it clearer that it doesn't deal with binary data