since `Stream.Read()` could return early, I think what we should be testing is if `numberOfReadBytes == 0`, and if we're not done, then return the error.