Grossomodo, quello che andrebbe fatto è questo:
codice:
// Creo l'InputStream per leggere dal file
FileInputStream fis = new FileInputStream( fileName );
// Ottengo l'OutputStream per scrivere sulla socket e lo wrappo
// in un BufferedOutputStream per ottenere uno stream bufferizzato
BufferedOutputStream bos = new BufferedOutputStream( socket.getOutputStream() );
// Strutture dati per la lettura/scrittura dei byte
// 32 KB di dati per blocco
byte[] dati = new byte[32 * 1024];
// Numero di byte letti dal file
int byteLetti = 0;
// Ora leggo un blocco alla volta...
while((byteLetti = fis.read(dati)) >= 0) {
// ... e lo scrivo sulla socket immediatamente
bos.write(dati, 0, byteLetti);
// non indispensabile, ma utile: pulisco il buffer di lettura
Arrays.fill(dati, (byte) 0);
}
// Ho finito di leggere e spedire il file... effettuo un flush per
// svuotare il buffer di scrittura
bos.flush();
// Chiudo il file
fis.close();
Attenzione che non ho effettuato alcuna gestione delle eccezioni, intendendo questo come un codice puramente dimostrativo del funzionamento. In ambito reale è necessario effettuare una corretta gestione delle eccezioni e avvalersi del blocco finally per la chiusura degli stream.
Ciao.