Почему вот так - решение проходит?
byte[] buffer2 = new byte[in2.available()];
byte[] buffer3 = new byte[in3.available()];

out1.write(buffer2);
out1.write(buffer3);
А вот так - не проходит?
byte[] buffer2 = new byte[in2.available()];
byte[] buffer3 = new byte[in3.available()];

int count2 = in2.read(buffer2);
int count3 =  in3.read(buffer3);

out1.write(buffer2, 0, count2);
out1.write(buffer3, 0, count3);
UPD1: Прошу прощения, пропустил кусок в первом варианте. Имелось в виду так:
byte[] buffer2 = new byte[in2.available()];
byte[] buffer3 = new byte[in3.available()];

in2.read(buffer2);
in3.read(buffer3);

out1.write(buffer2);
out1.write(buffer3);