Não existe perigo em mandar arquivo via socket, o perigo é programar o socket de forma errada.
Até ler um arquivo do disco da forma que vc implementou não é a adequada, quem dira pegar um arquivo de um socket.
Quando vc faz um InputStream.read, vc não tem a garantia que todos os bytes serão lidos naquele momento, nem mesmo a garantia que seu numero magico será o numero de bytes lidos.
Pode ser que na primeira InputStream.read venham apenas 500b, por isso nosso amigo entanglement resaltou a importancia de pegar o numero de bytes recebidos.
Em outras palavras, o pooling (for) vai garantir que seu arquivo venha inteiro (pode ser que vc tenha que dar 20 InputStream.read), e pegar o numero de bytes recebidos garante que vc não vai escrever lixo no seu arquivo. (já que pode vir apenas 500 unidades e todo o resto do array seria lixo)
Isso vale tanto para sockets quanto para IO comum.