A composite buffer is most efficient when its segments are consumed as they are, but it can be flattened into a contiguous buffer when necessary, by callingToShared(). Ownership of segment buffers is not changed on construction, but if ownership of segments is required then that can be guaranteed by callingMakeOwned().