In particular, splitting up the Read and Write halves mean that you can't use these in a generic context that expects a full stream (Read + Write).
We should consider deprecating these in favor of a single null constructor that is both Read and Write.