Io non ho mai avuto alcun problema a trasferire dati di quella dimensione (anzi, ne trasferisco anche di più grandi).
Solo che devi "pacchettizzare"... ovvero, il file lo devi trasferire a pacchetti di N byte, non tutto in una volta.
In questo mio post c'è un esempio di invio di byte su una socket (a pacchetti).
La lettura (ovvero, la ricezione) è speculare:
codice:
// Creo l'InputStream per leggere dalla Socket
InputStream is = socket.getInputStream();
// Strutture dati per la lettura dei byte
// 32 KB di dati per blocco
byte[] dati = new byte[32 * 1024];
// Numero di byte letti dalla socket
int byteLetti = 0;
// Ora leggo un blocco alla volta...
while((byteLetti = is.read(dati)) >= 0) {
// Nell'array "dati" ho un pacchetto letto dalla socket
// Ci faccio quello che voglio (lo salvo su un file, lo lavoro...)
// ...
// non indispensabile, ma utile: pulisco il buffer di lettura
Arrays.fill(dati, (byte) 0);
}
// Ho finito di leggere il file dalla socket...
// Chiudo l'InputStream (se necessario)
is.close();
Ciao.