Java NIO
我会努力变强的
这个作者很懒,什么都没留下…
展开
-
IO线程模型Reactor模型
概述前言:要对IO模型、多路复用、java NIO网络编程有一定的理解才能看懂。不同的线程模型,对程序的性能影响很大,要搞钱Netty的线程模型,就要了解一下各种线程模型。目前存在的线程模型有:传统阻塞I/O服务模型。Reactor模型。首先来说说传统的网络IO线程模型:特点:采用阻塞IO模式获取输入的数据。每个连接都需要独立的线程完成数据的输入(会造成阻塞)、业务处理、数据返回(会造成阻塞)。也就是一个线程就负责一个客户端连接的所有东西。问题:当并发量很大时,需要创建大原创 2020-12-18 18:36:26 · 494 阅读 · 2 评论 -
Java NIO网络编程之群聊系统
概述对ServerSocketChannel、SocketChannel、SelectionKey有一定的理解和了解对应API。NIO非阻塞网络编程相关关系梳理:以下概念:ServerSocketChannel:可以类比BIO网络编程的ServerSocket,属于服务端的Socket,用于监听接收客户端连接。SocketChannel:类比Socket,用于连接两台计算机的套接字,只是支持非阻塞。Selector:多路复用器。SelectionKey:与Channel进行绑定,Select原创 2020-12-18 15:46:54 · 244 阅读 · 1 评论 -
详解Unix5种IO模型
定义:Unix网络编程对IO模型进行了分类,共分为5类,要在Unix系统的前提下才有效。5种IO模型:阻塞IO。非阻塞IO。IO多路复用。信号驱动。异步IO。这些IO模型的改动的目的是为了提高服务器能够并行处理的连接数,而不是提高程序的执行性能。前提:要搞懂阻塞、非阻塞、同步、异步。阻塞、非阻塞、同步、异步可以看彻底搞懂阻塞、非阻塞、同步、异步五种IO模型详细分析:阻塞IO:定义:进程在进行IO操作时会挂起,会一直阻塞到内核缓冲区数据准备好并复制到用户缓冲区之后。流程解释:原创 2020-05-19 17:22:39 · 698 阅读 · 2 评论 -
Java NIO网络编程之Selector
概述Java的NIO,用非阻塞的IO方式,可以用一个线程,处理多个客户端连接(多路复用),就会用到Selector(多路复用器/选择器)。Selector能够检测多个注册通道channel上是否有事件发生(多个Channel以事件的方式注册多同一个Selector),类似基于epoll的多路复用,如果有事件发生,便获取事件,然后针对每个事件进行相应的处理,这个月就可以用单线程去处理多个连接和请求。只有在连接/通道真正有读写事件发生时,才会进行读写,就大大减少了系统开销,并且不必为每个连接都创建一个线程原创 2020-12-16 18:13:48 · 242 阅读 · 1 评论 -
java NIO网络编程之SelectionKey
概述SelectionKey是java.nio.channels包下的一个类,主要用于绑定selector和chanel之间的关联(注册关系)。SelectionKey定义了selector监控事件的四种类型: public static final int OP_READ = 1 << 0; //1,数据读取完成触发的事件 public static final int OP_WRITE = 1 << 2; //4 数据写入完成触发的事件 public static f原创 2020-12-16 17:08:02 · 486 阅读 · 0 评论 -
Java网络编程之SocketChannel和ServerSocketChannel
SocketChannelSocketChannel是原创 2020-12-16 14:51:54 · 1221 阅读 · 0 评论 -
Java NIO学习篇之直接缓冲区和非直接缓冲区
定义原创 2020-05-23 16:36:13 · 1333 阅读 · 2 评论 -
Java NIO学习篇之缓冲区CharSet详解
定义:CharSet是java nio对编码解码的解决方案,专门负责字符的编码和解码。原创 2020-05-22 17:37:42 · 803 阅读 · 0 评论 -
Java NIO学习篇之通道FileChannel详解
定义:FileChannel是Java NIO对应于磁盘等存储设备文件操作的通道。常用API详解:获取FileChannel的API/*** 打开一个与文件的连接通道,用于进行文件操作。* path:path,文件的路径对象,可用Path.get("文件路径"),获取。* options:通道的操作参数。通常使用实现类枚举StandardOpenOption指定。* attrs:创建文件时自动设置的文件属性的可选列表,比如读写执行。*/public static FileChannel原创 2020-05-22 11:57:19 · 1145 阅读 · 0 评论 -
Java NIO学习篇之PosixFilePermission详解
定义:PosixFilePermission是一个枚举类,代表着文件的基本权限。public enum PosixFilePermission { /** * 文件所有者的读权限 */ OWNER_READ, /** * 文件所有者写权限。 */ OWNER_WRITE, /** * 文件所有者执行权限 */ OWNER_EXECUTE, /** * 文件所属组成员读权限原创 2020-05-21 21:12:20 · 1205 阅读 · 0 评论 -
Java NIO学习篇之StandardOpenOption详解
定义:StandardOpenOption是一个枚举类,代表着文件连接时的标准选项。通常可以多个选项一起使用。public enum StandardOpenOption implements OpenOption { /** * 以读的方式连接文件。 */ READ, /** * 以写的方式连接文件。 */ WRITE, /** * 以追加的方式连接文件,不会覆盖文件原本内容,在后面追加。 */原创 2020-05-21 21:08:10 · 5137 阅读 · 3 评论 -
Java NIO学习篇之通道Channel详解
定义:Channel:管道,运输的介质,可以大致比喻成铁路的铁轨,不过他连接的不是数据源,连接的是缓冲区Buffer。与传统IO的Stream比较:NIO通道可以异步读写,而传统IO的Stream不能。NIO通道里面的数据一定是先读到缓冲区或者先写到缓冲区的,不能直接面向数据源;而传统IO的Stream既可以面向缓冲区,也可以直接面向数据源。Channel的实现:java.nio.channels.Channel是一个接口,他有一些常用的实现类:FileChannel: 从文件读写数据原创 2020-05-21 18:38:58 · 2554 阅读 · 0 评论 -
Java NIO学习篇之缓冲区ByteBuffer详解
定义:ByteBuffer是Buffer的实现类之一,是一个通用的缓冲区,功能要比其他缓冲区子类多。支持直接内存。是一个抽象类。子类实现是HeapByteBuffer(非直接缓冲区子类),DirectByteBuffer(直接缓冲区子类)。看此文前建议看看:关于Buffer可以查看 Java NIO学习篇之缓冲区Buffer详解直接缓冲区:以上是书《深入理解Java虚拟机》对直接内存的描述。简单来说直接内存不是JVM内存,而是计算机真正的物理内存。我们IO中有个步骤是:读:把内核缓冲原创 2020-05-20 20:50:41 · 1534 阅读 · 0 评论 -
Java NIO学习篇之缓冲区Buffer详解
定义缓冲区Buffer在java nio中负责数据的存储,缓冲区就是数组,用于存储不同类型数据的数组。jdk为java七大基本类型数据都准备了响应的缓冲区(boolean值除外):ByteBufferCharBufferShortBufferIntegerBufferLongBufferFloatBufferDoubleBuffer上述缓冲区除了ByteBuffer的 功能稍微多点外,因为ByteBuffer是通用的,所以功能会比较多。其他6种的使用方式几乎是一致的。/** Bu原创 2020-05-20 18:02:17 · 700 阅读 · 0 评论 -
Java NIO学习篇之NIO的基本认识
定义:NIO:是从jdk1.4提出的,本意是New IO(相对于传统的IO),也叫 No Blocked IO(只相对于网络IO),它的出现弥补传统IO的不足,提出了更加高效的方式。NIO对于网络IO而言:jdk1.4:采用了基于select/poll的多路复用IO模型。jdk1.5及以上:采用了基于epoll的多路复用IO模型。NIO对于文件IO而言:NIO对基于文件的IO还是阻塞模型的IO。只有基于网络IO才是非阻塞的。NIO的新特性:基于通道(Channel)和缓冲区(Buffer)原创 2020-05-18 19:56:40 · 195 阅读 · 0 评论