Devo trasferire ~ 100 MB di dati su ServerSocket utilizzando NIO, ma non riesco a capire come farlo senza interruzione del trasferimento in qualsiasi luogo/mantenendo lo stato del trasferimento.Java - Trasferimento di file di grandi dimensioni su canali - NIO
La mia prima idea era quella di inviare la dimensione del file, apparentemente non posso inviare la dimensione di quei file di grandi dimensioni perché non si adatta nemmeno alla RAM in una volta. Poi ho pensato, perché non basta trasferire fino nulla viene ricevuto, ma questo è quando il problema si presenta in.
Anche se sto scrivendo i dati del server-retro per tutto il tempo
FileChannel fc = new FileInputStream(f).getChannel();
ByteBuffer buffer = ByteBuffer.allocate(1024);
while(fc.read(buffer) > 0) {
buffer.flip();
while(channel.write(buffer) > 0);
buffer.clear();
}
ma perché ci devono essere interruzioni nel trasferimento di file un po 'di tempo leggendo i dati costantemente e rompendo quando nulla è disponibile era una cattiva idea.
Non riesco a capire come potrei dire al cliente se ci sono ancora dati disponibili senza dover inviare ogni porzione di dati come nuovo pacchetto con codice operativo ecc. O è addirittura possibile?
Inoltre sto chiedendo se modo theres meglio mandare intero buffer che sotto
while(channel.write(buffer) > 0);
Ho risposto a una parte di questo, ma devo dire che non capisco cosa intendi con "ci devono essere pause nel trasferimento dei file un po 'di tempo" e "leggere i dati costantemente e interrompere quando nulla è disponibile era una cattiva idea ". Spiega per favore. – EJP