Ваш код читает правильно, но пишет неправильно
while ((read = in.read(bytes)) > 0) { // Read amount of bytes
totalBytes += read; // Add the correct amount of bytes read to total
out.write(bytes); // Write the whole array, no matter how much we read
out.flush(); // Completely unnecessary, can harm performance
}
Вам нужно out.write(bytes, 0, read)
, чтобы записать только прочитанные байты вместо всего буфера.