di programmazione Java, I/O è stato fino a poco tempo effettuata utilizzando una metafora flusso. Tutto l'I/O è visto come il movimento di singoli byte, uno alla volta, attraverso un oggetto chiamato Stream. Stream I/O è utilizzato per contattare il mondo esterno. È anche usato internamente, per trasformare oggetti in byte e poi di nuovo in oggetti.
NIO ha lo stesso ruolo e lo scopo, come ho originale/O, ma utilizza una metafora diversa - blocco I/O. java.nio (new/non-blocking I/O)) è stata introdotta l'API con JDK1.4.
Che differenza c'è tra I/O del flusso e I/O del blocco?
Un sistema di I/O orientato al flusso tratta i dati un byte alla volta. Un flusso di input produce un byte di dati e un flusso di output consuma un byte di dati. È molto facile creare filtri per i dati in streaming. È anche relativamente semplice concatenare più filtri insieme in modo che ognuno faccia la sua parte in ciò che equivale a un singolo, sofisticato meccanismo di elaborazione. D'altro canto, l'I/O orientato al flusso è spesso piuttosto lento.
di offerte di sistema I/O orientati a blocchi con dati in blocchi. Ogni operazione produce o consuma un blocco di dati in un unico passaggio. L'elaborazione dei dati da parte del blocco può essere molto più veloce rispetto all'elaborazione del byte (in streaming). Ma l'I/O orientato ai blocchi manca dell'eleganza e della semplicità dell'I/O orientato al flusso.
Quando si utilizza java.io e quando si preferisce java.nio?
scalabilità probabilmente guidare la vostra scelta di pacchetto. java.net richiede un thread per socket. Codificarlo sarà molto più facile. java.nio è molto più efficiente, ma è difficile da codificare.
È possibile ottenere una migliore scalabilità una volta che si hanno a che fare con decine di migliaia di connessioni, ma a numeri inferiori probabilmente si otterrà un throughput migliore con il blocco dell'IO.
Quando si lavora con Java SSL.nio non è una cosa facile da affrontare
Importante: se si sta lavorando con uno dei pacchetti, non è una buona idea per creare il quadro da zero fino a quando e se non avete un motivo valido per farlo così.
Per java.nio, i progetti come Grizzly e Quick Server forniscono componenti server non bloccabili riutilizzabili.
Da leggere Pain points with java.nio
Infine si riduce a requisiti specifici dei vostri progetti e ciò che si sta cercando di ottenere. Alcune delle migliori soluzioni potrebbero non richiedere l'infrastruttura più complessa al
Aggiornamento: Recentemente scoperto sul pacchetto NIO.2 che esiste da jdk 1.7. NIO.2 è diverso da NIO, il principale è che NIO.2 offre funzionalità di canale asincrono. NIO.2 primer
Se si lavora con NIO, vale la pena fare la differenza e quale si adatta al proprio scopo.
Non un * risponditore *, quindi posterò un commento: [La pagina di Wikipedia su di esso] (http://en.wikipedia.org/wiki/New_I/O) discute alcuni degli obiettivi e le ragioni per pacchetto nio. –
Essendo pedante, "Path" fa parte della libreria NIO2 aggiunta in Java 7. BTW: Mentre ci si concentra molto sui socket NIO non bloccanti, di solito utilizzo i socket NIO bloccati, che sono più semplici da usare con IMHO. NIO2 Aggiungi NIO asincrono per socket e file. –