![](https://img-blog.csdnimg.cn/20201014180756916.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java NIO
-yanhui-
这个作者很懒,什么都没留下…
展开
-
Java NIO(一)从操作系统角度对比IO与NIO的对比
传统IO 先来看一下FileInputStream调用read()方法后,底层都做了什么操作。 FileInputStream in = new FileInputStream(file); byte bytes[] = new byte[1024]; in.read(contentByte); 内核发送一条命令给磁盘控制器,告诉磁盘控制器,我要读取磁盘上的数据。 利用DMA把磁盘上的数据...原创 2018-07-03 16:11:38 · 2654 阅读 · 1 评论 -
Java NIO(二)API基本概述
Java NIO 由以下几个核心部分组成: Channel Buffer Selector Channel(通道)可以理解为对IO操作的优化,传统IO基于流操作,读只能用输入流,写只能用输出流。流都是单向的,而通道是双向的,既可以基于通道进行写,也可以进行读。Channel的几个实现类: FileChannel DatagramChannel SocketChannel ServerS...原创 2018-07-03 19:00:20 · 597 阅读 · 0 评论 -
Java NIO(三)缓冲区Buffer
Buffer 缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成NIO Buffer对象,并提供了一组方法,用来方便的访问该块内存。 capacity(容量) position(位置) limit(上限) capacity capacity代表着Buffer的固定大小值,能存放的最大值不超过capacity。 position 当写数据到Buffer...原创 2018-07-03 19:30:23 · 238 阅读 · 0 评论 -
Java NIO(四)API调用(同步阻塞nio|异步非阻塞aio)
在Java NIO(一)从操作系统角度对比IO与NIO的对比中已经介绍了传统IO(也叫BIO,基本IO的意思),下面主要介绍NIO关于网络编程的部分。 网络编程的基本模型都是Server/Client模型,也就是两个进程之间相互通讯,其中服务端提供连接入口(IP地址和端口信息),客户端向服务端发起连接请求,通过三次握手,连接成功后可以利用Socket套接字进行通信。下图是Netty权威指...原创 2018-07-05 19:09:47 · 1821 阅读 · 0 评论 -
Java NIO(五)Netty框架简单应用
Netty是一款基于NIO开发的网络通信框架,Netty能通过编程自定义各种协议,因为netty能够通过自己来编码/解码字节流。本文只是对netty的简单应用。 下面对上一篇文章中的Server/Client(客户端向服务器端发送“query”字符串,服务器端响应给客户端一个当前系统时间)改造成用Netty框架实现。 //Server的实现 public class NettyServ...原创 2018-07-06 00:58:38 · 209 阅读 · 0 评论 -
Java NIO(六)Netty解决TCP粘包/拆包
TCP粘包/拆包 Tcp是个“流”协议,所谓流就是没有界限的一串数据。可以类比一下水流,没有分极限。TCP底层并不了解上层业务数据的具体含义,它会根据TCP缓冲区的实际情况进行包的划分。所以一个业务数据可能被TCP拆分成多个包进行发送,也有可能把多个小的数据包封装成一个大的数据包发送。这就是TCP的拆包和粘包。 出现TCP拆包/粘包的几个原因: 程序write写入的字节大小大于套接...原创 2018-07-06 15:30:45 · 1410 阅读 · 0 评论