Метод read возвращает количество фактически прочитанных байтов или -1, если достигнут конец потока. Поэтому вы должны писать только ss байтов, а не len байтов:
while ((ss = di.read(input, 0, len)) != -1) {
System.out.println(ss);
fout.write(input, 0, ss);
}
Обратите внимание, что DataInputStream и BufferedReader здесь совершенно не нужны.