void readWrite(SomethingHead head); default byte[] saveToByteArray aka saveAsByteArray aka toByteArray(SomethingHead head default new) { var baos = byteArrayOutputStream(); head.outputStream(baos); readWrite(head); head.finish(); ret baos.toByteArray(); } default S toHexString() { ret main toHexString(toByteArray()); } default File saveToFile(File file) { temp OutputStream out = bufferedFileOutputStream(file); var head = new SomethingHead(out); readWrite(head); head.finish(); ret file; } default selfType load aka fromByteArray(byte[] data) { readWrite(new SomethingHead(new ByteArrayInputStream(data))); this; } default selfType load(File file) { temp InputStream in = bufferedInputStream(file); readWrite(new SomethingHead(in)); this; } default long byteIOLength() { new JustCountingOutputStream out; var head = new SomethingHead(out); readWrite(head); head.finish(); ret out!; }