interface StringIO { replace SomethingHead with StringHead. void readWrite(SomethingHead head); default S saveToString(SomethingHead head default new) { var writer = stringWriter(); head.writer(writer); readWrite(head); head.finish(); ret str(writer); } default File saveToTextFile(File file) { temp Writer out = bufferedFileWriter(file); var head = new SomethingHead(out); readWrite(head); head.finish(); ret file; } default selfType load aka fromString(S data) { readWrite(new SomethingHead(stringReader(data))); this; } default selfType loadTextFile(File file) { temp var in = bufferedReader(file); readWrite(new SomethingHead(in)); this; } }