Looks like we're double buffering here.  `RSTRING_PTR()` is pretty lightweight [(a compare and dereference)](https://github.com/ruby/ruby/blob/trunk/include/ruby/ruby.h#L906-L909), so perhaps we could just stash `buf` instead of copying it to `data->read_buffer`? I guess we may need to do some ceremony around GC to make sure `buf` doesn't get collected though.