Java: quelle est exactement la différence entre NIO et NIO.2?


Je ne comprends pas très bien à quel point ils sont différents les uns des autres, donc j'ai quelques questions concernant ces deux paquets.

Après avoir regardé un peu sur Google, il semble qu'Oracle ait décidé de mettre à jour le package NIO avec le package NIO.2 plus récent et amélioré dans le cadre de la version JDK7.

  1. Comment les performances du package NIO se comparent-elles au package NIO.2?
  2. Quels sont les grands changements de NIO à NIO.2? (par exemple, de nouvelles méthodes, caractéristiques)
  3. Pourquoi le paquet original NIO a-t-il dû être mis à jour?
  4. est-ce que NIO.2 est juste synonyme du paquet NIO de nos jours?

Ce n'est pas que je veux utiliser le paquet hérité dans mon code, je suis juste vraiment curieux à ce sujet. S'il vous plaît dites-moi leurs différences?

Author: John Huynh, 2014-08-28

2 answers

Java a commencé initialement en proposant la classe File, dans le package java.io pour accéder aux systèmes de fichiers. Cet objet représente un fichier / répertoire et vous a permis d'effectuer certaines opérations telles que vérifier si un fichier/répertoire existe, obtenir des propriétés et le supprimer. Il avait, cependant, quelques lacunes. Pour n'en nommer que quelques-uns:

  • La classe File manquait de fonctionnalités importantes, telles qu'une méthode de copie.
  • Il a également défini de nombreuses méthodes qui ont renvoyé boolean. Comme on peut l'imaginer, dans le cas de une erreur, false a été renvoyée, plutôt que de lancer une exception. Le développeur avait, en effet, aucun moyen de savoir pourquoi il a échoué.
  • N'a pas fourni une bonne manipulation sur le support des liens symboliques.
  • Un ensemble limité d'attributs de fichier a été fourni.

Pour surmonter ces problèmes, java.le paquet nio a été introduit dans java 4. Les principales caractéristiques étaient:

  • Canaux et sélecteurs: Un canal est une abstraction sur les fonctionnalités de système de fichiers de niveau inférieur, par exemple mappées en mémoire fichier.
  • Buffers: Mise en mémoire tampon pour toutes les classes primitives (sauf pour Boolean).
  • Jeu de caractères: Jeu de caractères (java.nio.charset), encodeurs et décodeurs pour mapper les octets et les symboles Unicode

Avec java 7 le java.nio.le package de fichiers est introduit offrant un meilleur support pour la gestion des liens symboliques, l'accès aux attributs de fichiers et spécialement pour prendre en charge le système de fichiers étendu via des classes telles que Path, Paths et Files. Vous voudrez peut-être jeter un oeil au java.nio.fichier de package description pour obtenir plus de détails à ce sujet.

Avec ceci à l'esprit:

Quels sont les grands changements de NIO à NIO.2? (par exemple, de nouvelles méthodes, les caractéristiques)?

Ils servent des buts différents. Point de grands changements, vous pouvez consulter le tout nouveau package java.nio.file.

Pourquoi le paquet NIO d'origine a-t-il dû être mis à jour?

Ce n'est pas le cas. Un nouveau paquet a été introduit plutôt que mis à jour.

Est NIO.Deux synonyme du forfait NIO de nos jours? Comment les performances du package NIO se comparent-elles au NIO.2 paquet?

Non, ils ne sont pas synonymes. Il n'a pas non plus beaucoup de sens de comparer les performances entre eux, car ils servent à des fins différentes. NIO une E / S de données de bas niveau plus abstraite et NIO2 axée sur la gestion de fichiers.

J'espère que cela aide.

[Bibliographie: Oracle Certified Professional Java SE7 - Un guide complet de certification OCJP7, par S. G. Ganesh et Tushar Sharma-Chapitre 9]

 60
Author: Sousa Gaspar, 2018-06-09 13:04:02

NIO.2 introduit e/s asynchrones.

Les E/S asynchrones sont une approche des E/s non bloquantes qui n'est pas prise en charge par NIO.

NIO: sélecteurs / modèle de réacteur

NIO.2: gestionnaires de complétion / modèle proactor

Ainsi, lorsque sous Windows, NIO.2 utilise des ports d'achèvement d'E/S, ce qui devrait améliorer les performances. Sauf que personne ne le sait, car personne n'utilise Windows côté serveur, et s'ils le font, ils le font probablement parce qu'ils le sont fortement investi dans. net, et pour cette raison, vous n'envisagerez probablement pas d'utiliser Java.

 37
Author: Eugene Beresovsky, 2017-05-23 12:26:05