J'apprenais le paquet Java nio et je me suis rendu compte que File fournit déjà de nombreuses méthodes que nio.Files fournit à nouveau à l'aide de la classe Path. Comme cela, il me reste peu… .. Je ne comprends pas quelle est l'utilisation réelle du paquet nio.
Je suis juste très novice dans ce paquet, alors ma question est peut-être fausse, mais un peu d'aide peut m'aider à lire plus loin.
La principale différence entre IO et NIO est que IO bloque, alors que NIO est non bloquant.
Cet article explique les différences entre les packages et ce qu'est le blocage et le non-blocage IO.
En programmation Java, les entrées/sorties ont jusqu'à récemment été réalisées à l'aide d'une métaphore de flux. Toutes les E/S sont considérées comme le mouvement d'octets simples, un à la fois, à travers un objet appelé Stream. Stream I/O est utilisé pour contacter le monde extérieur. Il est également utilisé en interne pour convertir des objets en octets, puis en objets.
NIO a le même rôle et le même objectif que les E/S d'origine, mais utilise une autre E/S avec métaphore - bloc. L'API Java.nio (nouvelle/non bloquante) a été introduite avec JDK1.4.
Quelle est la différence entre le flux d'E/S et le bloc d'E/S?
Un système d'E/S orienté flux gère les données un octet à la fois. Un flux d'entrée produit un octet de données et un flux de sortie consomme un octet de données. Il est très facile de créer des filtres pour les données en streaming. Il est également relativement simple d'enchaîner plusieurs filtres afin que chacun joue son rôle dans un mécanisme de traitement unique et sophistiqué. D'un autre côté, les E/S orientées flux sont souvent plutôt lentes.
Un système d'E/S orienté bloc gère les données par blocs. Chaque opération produit ou consomme un bloc de données en une étape. Le traitement des données par bloc peut être beaucoup plus rapide que celui par octet (transmis). Mais les E/S orientées blocs manquent de l'élégance et de la simplicité des E/S orientées flux.
Quand utiliser Java.io et quand préférer Java.nio?
L’évolutivité déterminera probablement votre choix de forfait. Java.net nécessitera un thread par socket. Le codage sera beaucoup plus facile. Java.nio est beaucoup plus efficace mais difficile à coder.
Vous pouvez obtenir une meilleure évolutivité une fois que vous avez affaire à des dizaines de milliers de connexions, mais à des nombres inférieurs, vous obtiendrez probablement un meilleur débit en bloquant les entrées-sorties.
Lorsque vous travaillez avec SSL, Java.nio n’est pas une tâche facile à gérer.
Important: Si vous travaillez avec l’un ou l’autre des packages, il n’est pas recommandé de créer le framework à partir de zéro tant que vous n’y êtes pas motivé.
Pour Java.nio, les projets tels que Grizzly et Quick Server fournissent des composants serveur non bloquants réutilisables.
À lire Points de douleur avec Java.nio
Enfin, cela dépend des exigences spécifiques de vos projets et de ce que vous essayez d’atteindre. Certaines des meilleures solutions peuvent ne pas nécessiter l'infrastructure la plus complexe
Mise à jour: Récemment découvert le paquetage NIO.2 qui existe depuis jdk 1.7. NIO.2 est différent de NIO, le principal étant que NIO.2 offre une fonctionnalité de canal asynchrone. NIO.2 primer
Si vous travaillez avec NIO, cela vaut la peine de passer en revue la différence et celle qui convient à votre objectif.
Java NIO: Canaux et tampons
Dans l’API IO standard, vous travaillez avec des flux d’octets et de flux de caractères. Dans NIO, vous travaillez avec des canaux et des tampons. Les données sont toujours lues d'un canal dans un tampon ou écrites d'un tampon dans un canal.
Java NIO: non bloquant IO
Java NIO vous permet de faire des E/S non bloquantes. Par exemple, un thread peut demander à un canal de lire des données dans un tampon. Pendant que le canal lit les données dans la mémoire tampon, le thread peut faire autre chose. Une fois les données lues dans la mémoire tampon, le thread peut alors continuer à les traiter. Il en va de même pour l'écriture de données sur des canaux.
Java NIO: sélecteurs
Java NIO contient le concept de "sélecteurs". Un sélecteur est un objet pouvant surveiller plusieurs canaux pour détecter des événements (tels que: connexion ouverte, données arrivées, etc.). Ainsi, un seul thread peut surveiller plusieurs canaux pour les données.
Plus de détails sur orcale
Presque toutes les méthodes de Java.io.File
ont des problèmes qui ne peuvent pas être résolus pour des raisons de compatibilité. La plus évidente est que les méthodes renvoient une boolean
en cas d'échec. Ces problèmes, ainsi que le désir de prendre en charge les systèmes de fichiers enfichables et bien d'autres choses ont nécessité le développement d'une nouvelle API de système de fichiers, c'est pourquoi Java.nio.File
a été créé.
NIO a également introduit les chaînes qui masquent la spécialisation Stream - File, Socket, Network.