ところで、標準ライブラリのOutputStreamとDataOutputの関係はどうなの?
こんな感じのコードを別々に書くことに合理性はあるの?

void example1(OutputStream out, List<byte[]> data) throws IOException {
    for (byte[] b : data) {
        out.write(b);
    }
}
void example2(DataOutput out, List<byte[]> data) throws IOException {
    for (byte[] b : data) {
        out.write(b);
    }
}