Innanzitutto grazie mille, Lele.
Riguardo la lettura del file "poco alla volta"(a blocchi) che citi nel tuo commento, potresti farmi vedere un attimo come farla? Era proprio quello che volevo fare. Io leggo il file così:

codice:
FileInputStream fileIn = new FileInputStream(fileName);		
			long fileLen =  (new File(fileName)).length();		 
			int intFileLen = (int)fileLen;		 
			byte[] byteArray = new byte[intFileLen];
			fileIn.read(byteArray);
			fileIn.close();

/* invio l'array di byte byteArray, un elemento per volta, utilizzando il socket su cui comunicano client e server, usando un ciclo for*/
Ovviamente la creazione di un byteArray, quando ho un file grosso, grande quanto il file stesso mi "costa" parecchia memoria.
Purtroppo, uso gli ObjectInputStream o ObjectOutputSTream, perché nel corso della comunicazione invio oggetti che serializzo e riutilizzo a destinazione e mi sembrano comodi a tale scopo.