
NIO&Socket
张伯毅
某厂技术,Apache DolphinScheduler Committer.
专注于调度&实时&大数据体系~
展开
-
深入探秘 Netty、Kafka 中的零拷贝技术!
Table of ContentsI/O 概念缓冲区虚拟内存mmap+write 方式Sendfile方式Java 零拷贝MappedByteBufferDirectByteBufferChannel-to-Channel 传输Netty 零拷贝其他零拷贝总结零拷贝,从字面意思理解就是数据不需要来回的拷贝,大大提升了系统的性能。我们也经常...翻译 2020-03-24 15:53:48 · 370 阅读 · 0 评论 -
NIO与Socket笔记 :实现Socket 通信[ 二 ]
TCP 连接的 3 次“握手”过程1 )客户端到服务端 : 我要连接 。2 )服务端到客户端:好的,已经连接上了 。3 )客户端到服务端:收到,确认已连接上了 。1、client发送SYN到server,将状态修改为SYN_SEND,如果server收到请求,则将状态修改为SYN_RCVD,并把该请求放到syns queue队列中。2、server回复SYN+ACK给client...原创 2019-04-03 18:36:04 · 2085 阅读 · 0 评论 -
NIO与Socket笔记 :实现Socket 通信[ 一 ]
基于TCP的Socket通信TCP 是一种 流协议,以流为单位进行数据传输 。什么是长连接?长连接可以实现当服务端与客户端连接成功后连续地传输数据,在这 个过程中,连接保持开启的状态,数据传输完毕后连接不关闭 。长连接是指建立 Socket 连 接后,无论是否使用这个连接,该连接都保持连接的状态 。什么是短连接?短连接是当服务端与客户端连接成功后开始传输数据,数...原创 2019-04-03 17:01:34 · 1917 阅读 · 0 评论 -
NIO与Socket笔记 :NetworkInterface
NetworkInterface类表示一个由名称和分配给此接口的 IP地址列表组成的网络接口,也 就是 Networklnterface类包含网络接口名称与 IP地址列表。 该类提供访问网卡设备的相关 信息,如可以获取网卡名称、 IP 地址和子网掩码等 。Socket 不是协议,是一种实现计算机之间通信的技术,而 HTTP 才是协议 。IP 地址就是标识加入到网络中设 备 的地址,通过 I...原创 2019-04-03 14:48:31 · 2778 阅读 · 0 评论 -
NIO与Socket笔记 :FileChannel
Java NIO中的FileChannel是一个连接到文件的通道。可以通过文件通道读写文件。FileChannel无法设置为非阻塞模式,它总是运行在阻塞模式下。打开FileChannel在使用FileChannel之前,必须先打开它。但是,我们无法直接打开一个FileChannel,需要通过使用一个InputStream、OutputStream或RandomAccessFile来...原创 2019-04-03 14:19:33 · 1553 阅读 · 0 评论 -
NIO与Socket笔记 :MappedByteBuffer
java io操作中通常采用BufferedReader,BufferedInputStream等带缓冲的IO类处理大文件,不过java nio中引入了一种基于MappedByteBuffer操作大文件的方式,其读写性能极高。MappedByteBuffer map(FileChannel.MapMode mode, long position, long size)方法的作 用是将此通道的文...原创 2019-04-03 13:50:37 · 1823 阅读 · 0 评论 -
NIO与Socket笔记 : Filelock 类的使用
FileLock类表示文件区域锁定的标记。 每次通过 FileChannel类的 lock()或tryLock()方 法获取文件上的锁定时,就会创建一个 FileLock (文件锁定) 对象。文件锁定对象最初是有效的。 通过调用 release()方法、 关闭用于获取该锁定的通道, 或者终止 Java 虚拟机(以先到者为准)来释放锁定之前,该对象一直是有效的 。 可通过调用 锁定的 isVal...原创 2019-04-03 11:28:08 · 1638 阅读 · 0 评论 -
NIO与Socket笔记 : 通道和 FileChannel 类的使用
在 NIO 技术中,要将操作的数据打包到缓冲区中,而缓冲区中的数据想要传输到目的 地是要依赖于通道的 。缓冲区是将数据进行打包,而通道是将数据进行传输,可见两者是形 影不离的 。NIO 技术中的数据要放在缓 冲 区中进行管理,再使用通道将缓冲区中的数据传输到目的地 。从缓冲区和通道的数据类型可以发现,缓冲区都是类,而通道都是接口,这是由于通道的功能实现是要依赖于操作系统...原创 2019-04-02 18:08:56 · 1870 阅读 · 0 评论 -
NIO与Socket笔记 : CharBuffer 类的 API 使用
CharBuffer类提供一个字符( char)序列缓冲区 。存储方式依旧为数组方式存储.数组类型为 char 类型.新增依旧是根据下标直接对数组进行操作,通过 postion 指针进行指向.public CharBuffer put(char x) { hb[ix(nextPutIndex())] = x; return this;}...原创 2019-04-02 09:46:55 · 1939 阅读 · 0 评论 -
NIO与Socket笔记 :AIO的使用
AIO 也叫NIO2.0 是一种非阻塞异步的通信模式。在NIO的基础上引入了新的异步通道的概念,并提供了异步文件通道和异步套接字通道的实现。AIO 并没有采用NIO的多路复用器,而是使用异步通道的概念。其read,write方法的返回类型都是Future对象。而Future模型是异步的,其核心思想是:去主函数等待时间。小结:AIO模型中通过AsynchronousSocketChann...原创 2019-04-07 20:01:10 · 2217 阅读 · 0 评论 -
NIO与Socket笔记 :Selector 类的使用
Selector类的主要作用是作为 SelectableChannel对象的多路复用器。可通过调用 Selector类的 open()方法创建选择器,该方法将使用系统的默认 Selector Provider创建新的选择器。也可通过调用自定义选择器提供者的 openSelector()方法来创建 选择器。在通过选择器的 close()方法关闭选择器之前,选择器一直保持打开状态。通过...原创 2019-04-07 18:46:36 · 2154 阅读 · 0 评论 -
NIO与Socket笔记 : Socket、NIO 理论
一、Socket 理论Socket编程其实就是实现服务端与客户端的数据通信,不管使用任何的编程语言,在 实现上基本上都是4个步骤: 1建立连接;2请求连接; 3回应数据; 4结束连接,这4个 步骤的流程图如图 1-3所示。在学习 NIO 之前,必须先学习 Socket,因 为 NIO 中的核心通道类都是基于 Socket技术的通道类 。学习 Socket 时要着重学...原创 2019-03-29 12:31:04 · 6416 阅读 · 0 评论 -
NIO与Socket笔记 : 复制缓冲区
ByteBuffer duplicate()方法的作用:创建共享此缓冲区内容的新的字节缓冲区 。新缓 冲区的内容将为此缓冲区的内容 。 此缓冲区内容的更改在新缓冲区中是可见的,反之亦然 。在创建新的缓冲区时,容量、限制、位置和标记的值将与此缓冲区相同,但是这两个缓冲区 的位置、界限和标记值是相互独立的 。 当且仅当此缓冲区为直接缓冲区时,新缓冲区才是直 接缓冲区 。当且仅当 此缓冲区为...原创 2019-04-01 18:05:33 · 1718 阅读 · 0 评论 -
NIO与Socket笔记 :Selector 的使用
选择器与 I/O 多路复用Selector选择器是 NIO 技术中的核心组件,可以将通道注册进选择器中,其主要作用就 是使用 1个线程来对多个通道中的已就绪通道进行选择,然后就可以对选择的通道进行数据 处理,属于一对多的关系,也就是使用1个线程来操作多个通道,这种机制在 NIO 技术中 称为“ I/O 多路复用” 。它的优势是可以节省 CPU 资源,因为只有 1 个线程, CPU ...原创 2019-04-04 18:44:27 · 2489 阅读 · 0 评论 -
NIO与Socket笔记 :实现Socket 通信[ 四 ]
基于UDP的Socket通信UDP (User Datagram Protocol,用户数据报协议)是一种面向无连接的传输层协议,提供不可靠的信息传送服务 。无连接是指通信时服务端与客户端不需要建立连接,直接把数据包从一端发送到另 一端,对方获取数据包再进行数据的处理 。UDP 是“不可靠的”,是指该协议在网络环境不好的情况下,会丢失数据包,因为没有数据包重传的功能,另外它...原创 2019-04-04 15:52:53 · 1720 阅读 · 0 评论 -
NIO与Socket笔记 :实现Socket 通信[ 三 ]
Socket 类的使用ServerSocket类作用是搭建 Socket的服务端环境, 而 Socket类的主要作用是使 Server 与 Client进行通信。绑定 bind 与 connect 以及端口生成的时机public void bind (SocketAddress bindpoint) 方法 的作用是将套接字绑定 到本地地址 。 如 果地址为 null,则系统将随机...原创 2019-04-04 15:08:44 · 2322 阅读 · 0 评论 -
NIO与Socket笔记 :TCP报文到达确认(ACK)机制
SYN表示建立连接, FIN表示关闭连接, ACK表示响应 TCP数据包中的序列号(Sequence Number)不是以报文段来进行编号的,而是将连接生存周期内传输的所有数据当作一个字节流,序列号就是整个字节流中每个字节的编号。一个TCP数据包中包含多个字节流的数据(即数据段),而且每个TCP数据包中的数据大小不一定相同。在建立TCP连接...原创 2019-04-04 10:47:06 · 4588 阅读 · 0 评论 -
NIO与Socket笔记 : 转换为 CharBuffer字符缓冲区及中文的处理
asCharBuffer()方法的作用:创建此字节缓冲区的视图 ,作为 char缓冲区。 新缓冲区的 内容将从此缓冲区的当前位置开始。 此缓冲区内容的更改在新缓冲区中是可见的 ,反之亦 然 ;这两个缓冲区的位置、 限制和标记值是相互独立的。 新缓冲区的位置将为 0,其容量和 限制将为此缓冲区中所剩余的字节数的 1/2,其标记是不确定的。 当且仅当此缓冲区为直接 缓冲区时,新缓冲区才是直接缓冲区。 ...原创 2019-03-29 14:32:47 · 2287 阅读 · 0 评论