2014-08-27 14 views
52

Non capisco quanto siano diversi gli uni dagli altri quindi ho alcune domande su questi due pacchetti.Java: qual è esattamente la differenza tra NIO e NIO.2?

Dopo aver guardato un po 'su Google, sembra che Oracle abbia deciso di aggiornare il pacchetto NIO con il nuovo e migliorato pacchetto NIO.2 come parte della versione di JDK7.

  1. Come si confronta la prestazione del pacchetto NIO con il pacchetto NIO.2?
  2. Quali sono alcuni grandi cambiamenti da NIO a NIO.2? (ad esempio nuovi metodi, funzioni)
  3. Perché il pacchetto originale NIO deve essere aggiornato?
  4. È NIO.2 solo al giorno d'oggi con il pacchetto NIO?

Non è che voglio usare il pacchetto legacy nel mio codice, sono solo molto curioso di questo. Per favore dimmi le loro differenze?

+1

NIO2 introduce l'I/O asincrono e il pacchetto java.nio.files. – EJP

+0

È così? Ho avuto l'impressione che NIO.2 fosse qualcosa di enorme. –

+0

Prima avevano IO. Quindi hanno introdotto "New IO". Quindi volevano introdurre più funzionalità, quindi l'hanno chiamato intelligentemente "New IO 2". – Kayaman

risposta

51

Java ha iniziato inizialmente offrendo la classe File, nel pacchetto java.io per accedere ai file system. Questo oggetto rappresenta un file/directory e ti permette di eseguire alcune operazioni come controllare se esiste un file/directory, ottenere le proprietà ed eliminarlo. Aveva, tuttavia, alcuni difetti. Per citarne alcuni:

  • La classe File mancava di alcune funzionalità importanti, come un metodo di copia.
  • Ha inoltre definito molti metodi che hanno restituito boolean. Come si può immaginare, in caso di errore, è stato restituito false anziché generare un'eccezione. Lo sviluppatore non aveva, in effetti, alcun modo di sapere perché avesse fallito.
  • Non ha fornito una buona gestione sul supporto dei collegamenti simbolici.
  • È stato fornito un set limitato di attributi di file.

Per superare questi problemi, pacchetto java.nio stato introdotto in java 4. Le caratteristiche principali sono:

  • Canali e Selettori: Un canale è un astrazione di livello inferiore funzioni del file system, ad esempio file mappati in memoria.
  • Buffer: buffering per tutte le classi primitive (eccetto per Boolean).
  • Charset: Charset (java.nio.charset), codificatori e decodificatori alla mappa byte e simboli Unicode

con Java 7 pacchetto java.nio.file viene introdotto fornire un migliore supporto per la gestione collegamenti simbolici , accesso agli attributi di file e specialmente per supportare il file system esteso attraverso classi come Path, Paths e Files. Potresti voler dare un'occhiata allo java.nio.file package description per ottenere ulteriori dettagli al riguardo.

Con questo in mente:

Quali sono alcuni grandi cambiamenti da NIO a NIO.2? (ad esempio, nuovi metodi, caratteristiche )?

Servono a scopi diversi. Per segnalare grandi cambiamenti potresti voler dare un'occhiata al nuovo pacchetto java.nio.file.

Perché il pacchetto NIO originale deve essere aggiornato?

Non ha funzionato. Un nuovo pacchetto è stato introdotto piuttosto che aggiornato.

Attualmente NIO.2 è sinonimo di pacchetto NIO? Come si confronta la prestazione del pacchetto NIO con il pacchetto NIO.2?

No, non sono sinonimi. Inoltre, non ha molto senso confrontare le prestazioni tra di loro, poiché servono a scopi diversi. NIO un I/O di dati di basso livello più astratto e NIO2 focalizzati sulla gestione dei file.

Spero che questo aiuti.

[Bibliografia: Oracle Certified Professional Java SE7 - Una guida completa Certificazione OCJP7, da S.G.Ganesh e Tushar Sharma - Capitolo 9]

33

NIO.2 introdotto asynchronous i/o.

L'I/O asincrono rappresenta un approccio all'I/O non bloccante non supportato da NIO.

NIO: selettori/reattore modello

NIO.2: completamento gestori/proactor pattern

Così, quando su Windows, NIO.2 uses I/O Completion Ports, che dovrebbe migliorare le prestazioni. Tranne, nessuno lo sa, perché nessuno usa Windows sul lato server, e se lo fanno, probabilmente lo fanno perché sono pesantemente investiti in .net, e per questo motivo molto probabilmente non considereranno l'utilizzo di Java.

+1

Mai dire mai. Esistono molti server basati su Windows in particolare quando il carico di lavoro previsto non è così elevato. –