sclass StringHead { replace InputStream with Reader. replace OutputStream with Writer. replace inputStream with reader. replace outputStream with writer. settable bool readMode; settable bool writeMode; gettable InputStream inputStream; gettable OutputStream outputStream; *() {} *(Reader reader) { writer(reader); } *(Writer writer) { writer(writer); } selfType reader(Reader reader) { this.reader = reader; readMode(true); this; } selfType writer(Writer writer) { this.writer = writer; writeMode(true); this; } void finish {} }