I'd almost prefer we do something (relatively odious) like returning `res` but stapling `length` to the read function (for those that need it) -- that way we don't generate garbage from this function. Thoughts?