Maison Java javaDidacticiel Exemple de code sur le processus de travail spécifique de Nio

Exemple de code sur le processus de travail spécifique de Nio

Jul 03, 2017 am 11:20 AM
工作 方式 经典

 1 public void selector() throws IOException { 2     
 ByteBuffer buffer = ByteBuffer.allocate(1024); 3     
 Selector selector = Selector.open(); 4     
 ServerSocketChannel ssc = ServerSocketChannel.open(); 5     
 ssc.configureBlocking(false);//设置为非阻塞模式 6     
 ssc.socket().bind(new InetSocketAddress(8080)); 7     
 ssc.register(selector, SelectionKey.OP_ACCEPT);//注册监听事件 8     
 while(true) { 9         Set selectorKeys = selector.selectorKeys();
 //取得所有key的集合10         Iterator it = selectorKeys.iterator();11         
 while(it.hasNext()) { //检查序列是否还有元素12             
 SelectionKey key = (SelectionKey) it.next();13             
 if((key.readyOps() & SelectionKey.OP_ACCEPT) == SelectionKey.OP_ACCEPT) {14                 
 ServerSocketChannel ssChannel = (ServerSocketChannel) key.channel();15                 
 SocketChannel sc = ssChannel.accept();//接受到服务端的请求16                 
 sc.configureBlocking(false);17                 
 sc.register(selector,SelectionKey.OP_ACCEPT);18                 
 it.remove();19             } 
 else if((key.readyOps() & SelectionKey.OP_READ) == SelectionKey.OP_READ) {20                 
 SocketChannel sc = (SocketChannel) key.channel;21                 
 while(true) {22                     buffer.clear();23                     
 int n = sc.read(buffer);//读取数据24                     
 if(n <= 0) {25                         
 break;26                     }                     
 buffer.flip();28                 }                
 it.remove();30             }    
 }
 }
 }
Copier après la connexion

  Le code ci-dessus est un exemple de code tiré du livre sur le processus de travail spécifique de Nio. Son processus de fonctionnement peut être décrit en détail comme suit :

Il existe deux classes clés : Canal et sélecteur , ce sont des concepts fondamentaux dans NIO. Le canal peut être comparé à un moyen de transport, et il s'agit d'un moyen de transport spécifique, comme les voitures et les vélos. Le Selector peut être comparé à un système de répartition de véhicules, chargé de surveiller les conditions de fonctionnement des véhicules et les travaux de répartition spécifiques.

La classe serverSocketChannel est un canal optionnel pour les sockets d'écoute orientées flux. Après avoir créé une telle instance côté serveur, utilisez la méthode Socket() (récupérez les informations associées à ce canal). Server Socket) renvoie une instance de la classe ServerSocket et utilise la méthode void bind(SocketAddress endpoint) de cette instance pour lier ServerSocket à une adresse spécifique (adresse IP et numéro de port). Tout comme chaque taxi d'une compagnie de taxi doit être enregistré auprès de l'entreprise, nous devons également enregistrer l'instance ServerSocketChannel auprès du sélecteur spécifié via la méthode register().

Appelez ensuite la méthode selectedKeys de Selector pour vérifier si tous les canaux de communication enregistrés sur ce sélecteur ont les événements requis. Si un événement se produit, tous les événements seront renvoyés SelectionKey, depuis la clé. .readyOps() obtient l'ensemble d'opérations prêt de cette clé, je pense personnellement que key.readyOps()&SelectionKey.OP_ACCEPT signifie que l'ensemble d'opérations prêt de cette clé est dans l'état ACCEPT, c'est-à-dire le Le serveur est dans l'état d'écoute, l'objet canal de communication peut être obtenu via la méthode Channel de cet objet, puis la méthode accept() est appelée pour renvoyer un canal socket, qui est par défaut dans un état de blocage. Vous pouvez également utiliser la communication. objet canal obtenu par la méthode Channel pour lire les données de communication, et Les données lues ici sont Buffer, et ce Buffer est un tampon que nous pouvons contrôler.


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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Quelles sont les méthodes de traitement du temps en langage Go ? Quelles sont les méthodes de traitement du temps en langage Go ? Jun 10, 2023 pm 09:42 PM

En tant que langage de programmation moderne, le langage Go joue un rôle important dans le développement. Le langage Go fournit des fonctions et des structures temporelles intégrées pour rendre le traitement du temps plus pratique. Dans cet article, nous présenterons quelques méthodes de traitement du temps couramment utilisées dans le langage Go. time.Now() Nous pouvons utiliser la fonction time.Now() pour obtenir l'heure actuelle : now:=time.Now()fmt.Println(now) sortie : 2019-06-131

À quels emplois puis-je postuler en 2023 avec mes compétences Java ? À quels emplois puis-je postuler en 2023 avec mes compétences Java ? Sep 21, 2023 am 11:41 AM

Lorsque nous parlons de langages de programmation et d’emplois, un langage de programmation qui nous vient à l’esprit est Java. La plupart des entreprises dans le monde utilisent Java. C'est populaire et les opportunités d'emploi sont nombreuses. Si vous souhaitez obtenir un emploi grâce aux compétences Java en 2023, c'est une bonne chose pour vous car les compétences Java peuvent vous permettre d'obtenir un emploi rapidement. De plus, cela peut rapidement faire progresser votre carrière. Il n’existe pas de tour de magie qui vous permettra de trouver un emploi rapidement. Mais vos compétences sont comme de la magie pour vous. Choisissez un emploi qui vous satisfait et un bon environnement qui peut grandement valoriser votre carrière. Si vous êtes débutant et avez de l'expérience, Java vous offre également un bon travail. De nombreuses entreprises utilisent Java comme programme principal pour leur développement. il

Analyse des responsabilités de l'ingénieur front-end : quel est le travail principal ? Analyse des responsabilités de l'ingénieur front-end : quel est le travail principal ? Mar 25, 2024 pm 05:09 PM

Analyse des responsabilités de l'ingénieur front-end : quel est le travail principal ? Avec le développement rapide d'Internet, les ingénieurs front-end jouent un rôle professionnel très important, jouant un rôle essentiel de pont entre les utilisateurs et les applications du site Web. Alors, que font principalement les ingénieurs front-end ? Cet article analysera les responsabilités des ingénieurs front-end, découvrons-le. 1. Responsabilités de base des ingénieurs front-end Développement et maintenance du site Web : les ingénieurs front-end sont responsables du développement front-end du site Web, y compris la rédaction du code HTML, CSS et JavaScr du site Web.

ChatGPT et d'autres ne prendront pas en charge le travail humain de si tôt. Ils sont sujets aux erreurs et l'IA ne fonctionnera pas gratuitement. ChatGPT et d'autres ne prendront pas en charge le travail humain de si tôt. Ils sont sujets aux erreurs et l'IA ne fonctionnera pas gratuitement. May 21, 2023 am 08:49 AM

La sortie successive de grands modèles tels que ChatGPT a fait que de nombreuses personnes se sentent stressées et craignent que l’IA ne prenne bientôt le dessus sur leur travail. À cet égard, OpenAI a également publié une étude montrant que l’impact de ChatGPT couvre toutes les classes de revenus et que les emplois à revenu élevé peuvent être confrontés à des risques plus importants. Quels sont les faits ? Devons-nous automatiser tous les travaux, même les plus satisfaisants ? C'est l'une des nombreuses questions soulevées récemment par le Future of Life Institute, qui a appelé à un moratoire sur les expériences d'intelligence artificielle à grande échelle et qui a maintenant été signé par plus de 10 000 personnes, dont Elon Musk, Steve Wozniak et Andrew Yang.

Quels emplois pouvez-vous obtenir en apprenant Java ? Quels emplois pouvez-vous obtenir en apprenant Java ? Jan 16, 2024 pm 04:58 PM

Emplois possibles : 1. Développement d'applications au niveau de l'entreprise ; 2. Développement de sites Web ; 3. Développement d'applications mobiles ; 5. Analyse de mégadonnées ; 6. Informatique scientifique et intelligence artificielle ; développement d'applications industrielles, etc. Introduction détaillée : 1. Développement d'applications au niveau de l'entreprise : Java occupe une position importante dans le développement d'applications au niveau de l'entreprise et peut être utilisé pour développer des systèmes vastes et complexes, tels que ERP, CRM, etc. Ces systèmes doivent généralement traiter de grandes quantités de données, prendre en charge une concurrence élevée et garantir la stabilité du système. 2. Développement de sites Web : y compris front-end et back-end, etc.

Quel genre de travail pouvez-vous obtenir en apprenant Java ? Quel genre de travail pouvez-vous obtenir en apprenant Java ? Jan 16, 2024 pm 05:18 PM

Emplois que vous pouvez trouver en apprenant Java : 1. Développement d'applications au niveau de l'entreprise ; 2. Développement de sites Web ; 3. Développement Android ; 5. Big data et cloud computing ; . Développement et maintenance de logiciels ; 9. Programmation de systèmes et de réseaux ; 10. Sécurité et cryptage ; 12. Consultation et conseil ; Introduction détaillée : 1. Développement d'applications au niveau de l'entreprise. Java occupe une position très importante dans le développement d'applications au niveau de l'entreprise. Grâce à Java, diverses applications complexes au niveau de l'entreprise peuvent être développées, telles que des systèmes OA, etc.

Quel type de travail puis-je effectuer à l'avenir en utilisant le langage C ? Quel type de travail puis-je effectuer à l'avenir en utilisant le langage C ? Jan 29, 2024 pm 02:47 PM

Emplois que le langage C peut effectuer à l'avenir : 1. Développement de systèmes ; 2. Développement de jeux ; 3. Développement de réseaux ; 5. Développement de compilateurs ; 7. Sécurité de réseau ; 9, domaine de l'éducation ; 10. Analyse des données et apprentissage automatique ; 11. Développement et maintenance de logiciels ; Introduction détaillée : 1. Développement de systèmes. Le langage C est un langage commun pour la programmation au niveau système. Il peut être utilisé pour développer des systèmes d'exploitation et des systèmes embarqués. Si vous maîtrisez le langage C, vous pouvez devenir ingénieur en développement de systèmes. , etc.

Comment supprimer les URL indésirables de la barre d'adresse de Chrome ? Comment supprimer les URL indésirables de la barre d'adresse de Chrome ? Mar 08, 2024 am 09:19 AM

Chrome enregistrera automatiquement les URL qui ont été saisies dans la barre d'adresse et « associera automatiquement le contenu de la requête » à l'avenir, mais souvent, nous n'avons pas besoin de certaines URL, comment les supprimer ? L'éditeur rencontre souvent ce problème. Les adresses saisies auparavant seront bloquées devant les adresses couramment utilisées, ce qui nécessitera de sélectionner plusieurs fois pour accéder au site Web souhaité. J'ai cherché comment le supprimer au moins trois fois car... je l'oublie à chaque fois. Dans les raccourcis de la barre d'adresse de l'aide officielle de Chrome Raccourcis clavier Chrome, la touche de raccourci de suppression est clarifiée : ▍Windows supprime le contenu de l'association de la barre d'adresse. Appuyez sur la touche fléchée vers le bas pour mettre en surbrillance le contenu correspondant, puis appuyez sur la touche Maj+Supprimer ▍macOS. supprime le contenu de l'association du bar d'adresse cliquez vers le bas

See all articles