Perhaps there could be a `buffer_size` argument that controls what's passed here. Not many things will return multiple times from `.read()`, and it could be a large file.