PDA

View Full Version : [JAVA] SocketChannel ....perplessità


Frank1962
20-08-2007, 11:11
Ho qualche dubbio sulla .read della socketchannel (modalità bloccante); poniamo che eseguo a monte della connessione una write di 100Mb di dati da inviare presso l'altro endsystem a capo della connesione il quale effettua una read con disponibile un bytebuffer di 1Gb .....se effettua una sola read senza utilizzare un ciclo while viene effettuata tutta la lettura dei 100Mb oppure sono costretto anche qui ad utilizzare un ciclo while come nei vecchi socket?

grazie per l'eventuale interessamento
ciao :)

PGI-Bis
20-08-2007, 11:47
La documentazione è ambigua ma propenderei per il no, non devi usare il ciclo.

Secondo la documentazione:

"if a channel is in blocking mode and there is at least one byte remaining in the buffer then this method will block until at least one byte is read. "

Ma di quale buffer sta parlando? Una riga sopra "buffer" è l'input buffer del socket, poco prima "buffer" è il buffer usato per leggere i dati dal socket.

Nel primo caso, non avresti la garanzia che usando un buffer di lettura d X byte read legga X byte. Nel secondo sì.

pisto
20-08-2007, 17:07
in base alla mia esperienza dico che è meglio usare un while, succedevano cose strane con un mio programma senza usare while(buffer.hasRemaining())
poi magari il mio caso non si applica a te, non ricordo bene cos'era e non ho più il sorgente. tanto alla fine se è bloccante è bloccante no? una riga in più ti da solo sicurezza