`
zhhphappy
  • 浏览: 121420 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java nio 基础概念笔记

 
阅读更多

 

Channel:

ServerSocketChannel 创建服务器端Socket,监听某特定端口,接收客户端请求。

SocketChannel 用于描述在一个客户端连接,既可以是发起请求的客户端本身的连接,也可以在表示该请求在服务器端与之对应的SocketChannel连接对象。几乎所有的数据读写操作都在这个类中完成。可以有block和nonblock两种方式。

 

 

ByteBuffer:

ByteBuffer分为两种,一种为direct,一种为Nondirect. 使用direct buffer时JVM会分配一个连续的内存块,直接通过native access mothed进行读写操作。而nondirect buffer时,JVM通过数组访问的方式来访问其中数据。在Channel对Buffer进行操作时,最终只操作direct buffer。如果Channel接收到的是一个nondirect buffer,它会创建一个direct buffer,然后将nondirect buffer中的数据拷贝到这个direct buffer中,然后调用系统方法进行读写。


Selector:
Selector 用于管理Channel,通过select轮循注册在该Selector上的所有Channel,并负责dispatch事件。
Selector扮演了Reactor的角色。每个SelectableChannel向Selector注册感兴趣的事件,当事件发生时,Selector记录并跟踪这些事件。当应用程序调用Selector的select方法时,Selector轮循所有注册过的SelectableChannels,查看是否有它们感兴趣的事件发生。 一个SelectableChannel可以向不同的Selector中注册不同的事件。每种类型的SelectableChannel所能注册的事件也不一样。各Channel能注册的事件如下表:
ServerSocketChannel OP_ACCEPT
SocketChannel OP_CONNECT, OP_READ, OP_WRITE
DatagramChannel OP_READ, OP_WRITE
Pipe.SourceChannel OP_READ
Pipe.SinkChannel OP_WRITE

channel和selector的主要类结构图:


 


 

  • 大小: 7.4 KB
  • 大小: 10.2 KB
分享到:
评论

相关推荐

    java NIO学习系列 笔记

    Java NIO(New Input/Output)是Java标准库在JDK 1.4版本中引入的一个新特性,它提供了一种不同于传统IO流的高效I/O处理方式。NIO的核心概念包括通道(Channel)和缓冲区(Buffer),这两个组件使得数据以块的形式...

    Java NIO学习笔记——ByteBuffer用法

    首先,我们了解下ByteBuffer的基本概念。ByteBuffer是一个字节缓冲区,可以存储字节序列。在NIO中,所有的数据读写都通过缓冲区进行,ByteBuffer与其他类型的Buffer(如CharBuffer、IntBuffer等)一样,都继承自...

    尚硅谷JAVA基础笔记吐血整理

    “尚硅谷JAVA基础笔记”涵盖了Java语言的基础知识,包括语言概述、基本语法、面向对象概念、封装、继承和多态,以及一些关键概念如形参与实参、属性与局部变量、构造器、this关键字、包和MVC设计模式的使用。...

    JAVA NIO学习笔记.docx

    Java NIO(New Input/Output)是Java标准库在JDK 1.4引入的一组新的I/O API,它提供了一种不同于传统IO的高效、非阻塞的I/O操作方式。NIO的核心概念包括Channel、Buffer和Selector,它们共同构建了一个与操作系统...

    javaNIO学习笔记

    ### Java NIO 学习笔记 #### 一、概述 Java NIO (Non-Blocking IO,也称为 Java New IO),是 Java 对传统 IO 模型的一次重大改进,旨在提高程序处理大量并发连接的能力。NIO 的核心组件包括 Channels、Buffers 和 ...

    NIO笔记.doc

    NIO的核心概念主要包括通道(Channel)、缓冲区(Buffer)和选择器(Selector),这些组件共同构建了一个基于块数据传输的高效I/O模型。 1. **I/O与NIO对比**: - **传统I/O(IO)**:基于流的I/O模型,数据以单个...

    javaNIO学习笔记(csdn)————程序.pdf

    Java NIO,全称Non-Blocking Input/Output,是非阻塞式输入输出,它是Java从1.4版本开始引入的一种新的I/O模型,为Java程序员提供了处理I/O操作的新方式。NIO的主要特点是其能够使Java程序以更有效的方式处理I/O流,...

    Java基础尚硅谷宋红康学习笔记

    理解封装、继承和多态是Java面向对象编程的关键概念。 3. **数组与集合**:数组用于存储固定数量的同类型元素,而集合框架(如ArrayList、LinkedList、HashSet、HashMap等)则提供了动态存储和操作对象的能力。 4....

    java全套笔记 来自狂神说java笔录.zip

    【Java编程语言基础】 Java是一种广泛使用的面向对象的编程...这些笔记内容全面覆盖了Java的基础和进阶知识,适合从零开始学习Java的人群,通过系统学习,可以建立起扎实的Java编程基础,为实战项目开发打下坚实基础。

    李兴华java word版全部笔记

    笔记首先从Java的基础知识入手,包括Java语言的历史背景、特点和应用领域。这一部分将介绍Java的跨平台特性(Write Once, Run Anywhere),解释JVM(Java虚拟机)的工作原理,以及如何通过编译和运行Java程序来入门...

    传智博客JAVA基础笔记个人总结

    传智博客的JAVA基础笔记个人总结是一份全面的学习资源,旨在帮助初学者或有一定基础的开发者巩固和提升Java编程技能。这份笔记是基于传智播客的课程内容,结合了牛牧老师和水镜老师的讲解精华,提供了27天的学习计划...

    李兴华java笔记

    1. **Java基础**:包括Java语言的基本语法、数据类型、控制结构(如if语句、switch语句、循环)、类与对象、封装、继承和多态等。这些是学习Java的基石,理解和掌握它们对于后续的学习至关重要。 2. **异常处理**:...

    Java JDK 6学习笔记——ppt简体版

    Java JDK 6学习笔记是为Java初学者量身定制的一份宝贵资料,它涵盖了Java编程的基础概念、语法以及核心特性。这份PPT简体版旨在帮助读者快速掌握Java开发的基本技能,逐步成为一名合格的Java程序员。 Java JDK...

    2019年魔乐Java培训课堂原版笔记-Word版.zip

    13-第十三天-魔乐java基础视频学习笔记.docx:可能是对Java SE的一些高级主题进行总结,比如反射、动态代理或者NIO等,这些技术在复杂应用开发中经常使用。 通过这些笔记,学习者可以按照天数逐步深入,从基础到...

    java基础18天Typora笔记

    通过这份笔记,学习者将逐步了解并掌握Java语言的核心概念和基本语法,为后续的深入学习和实践打下坚实的基础。 1. **Java简介** Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems(现为Oracle公司)...

    nio demo for nio学习笔记(体系结构以及模块介绍)

    在学习NIO时,首先需要理解Channel、Buffer、Selector的基本概念和使用方法,然后通过实例来熟悉它们的交互过程。例如,可以通过创建一个简单的服务器,使用ServerSocketChannel监听连接,SocketChannel处理客户端...

    java 入门基础教程笔记

    Java入门基础教程笔记是针对初学者精心准备的学习资源,旨在帮助新手快速掌握Java编程语言的基础概念和核心语法。这份PDF格式的高清教程来源于新东方的内部培训资料,具有很高的学习价值。 1. **Java简介**:Java是...

    张龙JAVA圣思园笔记

    笔记中可能讲解了InputStream和OutputStream抽象类,以及BufferedReader、PrintWriter等具体类的使用,还可能涉及到了NIO(New IO)框架,如Channel、Buffer、Selector等概念。 2. **线程**: Java对多线程的支持...

    java入门笔记.pdf

    Java入门笔记文档详细阐述了Java编程语言的基本概念、开发工具、编程基础、面向对象编程、多线程、集合框架、IO流、网络编程、安全加密、反射机制、新特性、内存管理等多个方面,为初学者提供了一条通往Java编程世界...

Global site tag (gtag.js) - Google Analytics