Maison >Java >javaDidacticiel >Une introduction détaillée à la comparaison entre NIO et IO de Java

Une introduction détaillée à la comparaison entre NIO et IO de Java

黄舟
黄舟original
2017-03-17 10:05:321293parcourir

Cet article présente principalement l'explication détaillée et la comparaison de NIO et IO de Java. Les amis qui en ont besoin peuvent s'y référer

La différence entre NIO et IO de Java

NIO est une IO asynchrone introduite dans JDK1.4. La partie centrale de NIO est composée de trois points :

  • Channel

  • Buffer

    <.>
  • Sélecteur


Comparaison entre NIO et IO

La différence entre NIO et IO, d'une manière générale Sous trois aspects :

  1. IO est basé sur stream (orienté Stream), tandis que NIO est basé sur Buffer (orienté Buffer)

  2. Opérations IO sont bloquants et les opérations NIO ne sont pas bloquantes

  3. IO n'a pas de concept de sélecteur, tandis que NIO a un concept de sélecteur.


Basé sur Stream Traditional IO basé sur Buffer

est orienté vers le flux d'octets ou le flux de caractères, mais dans NIO, nous avons abandonné le flux IO traditionnel et introduit les concepts de Channel et Buffer. Dans NIO, je ne peux lire que les données d'un canal dans un tampon ou écrire des données d'un tampon dans un canal.

Alors, qu'est-ce qui est basé sur le flux ? Dans les opérations Java IO générales, nous lisons séquentiellement un ou plusieurs octets d'un flux de manière continue, nous ne pouvons donc pas modifier les données lues à volonté. .


Mais basé sur Buffer, c'est un peu différent. Nous devons d'abord lire les données du Channel dans le Buffer Lorsqu'il y a des données dans le Buffer, nous pouvons opérer sur les données.

Contrairement à IO, qui est une opération séquentielle, dans NIO, nous pouvons lire des données à n'importe quel endroit et à volonté.

Blocage et non-blocage

Les différentes opérations Stream fournies par Java sont bloquantes. Par exemple, on appelle une méthode read pour lire le contenu d'un. fichier, Ensuite, le thread appelant read sera bloqué jusqu'à ce que l'opération de lecture soit terminée. Le mode non bloquant de NIO nous permet d'effectuer des opérations d'E/S de manière non bloquante. Par exemple, nous devons lire les données du réseau. Dans le mode non bloquant de NIO, lorsque nous appelons la méthode read, s'il y a des données à ce moment, read lit et renvoie s'il n'y a pas de données à ce moment, read renvoie ; directement et ne bloquera pas le thread actuel.

sélecteur

le sélecteur est un concept unique à NIO. C'est la clé pour laquelle Java NIO peut effectuer des opérations d'E/S de manière non bloquante.

Grâce au sélecteur, un thread peut surveiller les événements IO de plusieurs canaux. Lorsque nous enregistrons un canal dans un sélecteur, le mécanisme interne du sélecteur peut automatiquement demander (sélectionner) pour nous si ces canaux enregistrés sont disponibles. événements (tels que lisible, inscriptible, connexion réseau terminée, etc.). Grâce à un tel mécanisme de sélection, nous pouvons facilement utiliser un seul thread pour gérer efficacement plusieurs canaux.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn