DataOutputStreamはFileOutputStreamをラップできますが、なぜここで使用されているのかわかりません。
FileOutputStream fos = new FileOutputStream(args[0]);
DataOutputStream dos = new DataOutputStream(fos);
dos.writeByte('j');
fos.write('j');
最後の行は、この状況でDataOutputStreamが追加するものと同じです。つまり、なぜそこにあるのですか?