I would argue that this is a TupleOutputStream not a COWStream, there is nothing copy on write about it. It also seems like the TupleSerializer should be a member of the stream and not a parameter to write row? 

The serialization format is specific to the type of output stream. It seems like it could encapsulate all of that.