use the new writeOptionalStreamable etc for read and write?