use heap buffers

read something that direct buffers are only good for really big stuff,
so we don't get much benefit since most messages are relatively small