
nio
文章平均质量分 90
zhaoliwen是猪啊
这个作者很懒,什么都没留下…
展开
-
NIO网络编程(十)—— 零拷贝技术
NIO网络编程(十)—— 零拷贝技术文章目录NIO网络编程(十)—— 零拷贝技术传统的IO分析NIO优化零拷贝技术零拷贝技术1零拷贝技术2零拷贝技术的特点传统的IO分析如果要将一个文件从本地磁盘通过网络传输到另一台主机上,传统的IO会通过如下的代码,这段代码的步骤就是读取文件、将文件内容存到字节数组中、通过socket发送字节数组。File f = new File("helloword/data.txt");RandomAccessFile file = new RandomAccessFile原创 2021-11-19 15:53:41 · 932 阅读 · 0 评论 -
NIO网络编程(九)—— 再探NIO、BIO概念
NIO网络编程(九)—— 再探NIO和BIO文章目录NIO网络编程(九)—— 再探NIO和BIO前面在《NIO网络编程(一)—— BIO和NIO》中介绍了BIO、伪异步IO以及NIO的基本概念,之后的七篇博客介绍了NIO编程的相关知识,这篇博客是NIO网络编程的结尾,讲解一下关于NIO和BIO的概念知识。...原创 2021-11-18 20:06:04 · 561 阅读 · 0 评论 -
NIO网络编程(八)—— 多线程优化服务端
Netty编程(八)—— 多线程优化服务端文章目录Netty编程(八)—— 多线程优化服务端多线程架构Worker类的实现多Worker服务端代码多线程架构之前说到的服务端程序都是在一个线程上进行的,这个线程不仅负责连接客户端发来的请求,同时还要处理读写事件,这样效率还是不够高。如今电脑都是多核处理器,这意味着可以同时进行多个线程,所以服务端应该充分利用这一点。服务端线程可以建立多个线程,将这些线程分成两组:其中一个线程专门处理 accept 事件,称为Boss线程创建 cpu 核心数的线程,原创 2021-11-16 19:35:24 · 824 阅读 · 0 评论 -
NIO网络编程(七)—— nio.Selector之读写事件
Netty编程(七)—— nio.Selector之读写事件文章目录Netty编程(七)—— nio.Selector之读写事件读事件删除事件上一篇博客《Netty编程(六)—— nio.Selector之基本使用》介绍了selector以及如何处理连接事件,这篇博客介绍如何处理selector的读写事件。读事件在Accept事件中,若有客户端与服务器端建立了连接,需要将其对应的SocketChannel设置为非阻塞,并注册到选择其中,对其添加关注read事件,当客户端发来消息后服务器channel原创 2021-11-15 20:01:22 · 900 阅读 · 0 评论 -
NIO网络编程(六)—— nio.Selector之基本使用
Netty编程(六)—— nio.Selector(一)文章目录Netty编程(六)—— nio.Selector(一)Selector 总述Selector 使用方法之前的博客里说到《Netty编程(一)—— BIO和NIO》提到NIO三大组件中有一个叫selector的组件,它能够对多个channel进行选择。上一篇博客《Netty编程(五)—— NIO模块下的阻塞和非阻塞模式》中提到了channel、buffer的非阻塞模式下会有cpu空转的问题,因此在这一篇博客中介绍selector,它能够解决原创 2021-11-14 10:18:35 · 1053 阅读 · 0 评论 -
NIO网络编程(五)—— NIO模块下的阻塞和非阻塞模式
Netty编程(五)—— NIO模块下的阻塞和非阻塞模式文章目录Netty编程(五)—— NIO模块下的阻塞和非阻塞模式阻塞阻塞模式的设计阻塞模式的分析非阻塞非阻塞模式的设计非阻塞模式的分析阻塞阻塞模式的设计阻塞模式下,相关方法都会导致线程暂停ServerSocketChannel.accept 会在没有连接建立时让线程暂停,即使之后有客户端向服务端发送消息,服务端也接受不到,直到有新客户端连接服务端,不再阻塞在accept方法上。SocketChannel.read 会在通道中没有数据可读原创 2021-11-12 09:48:21 · 1186 阅读 · 0 评论 -
NIO网络编程(四)—— 文件编程
Netty编程(四)—— 文件编程文章目录Netty编程(四)—— 文件编程FileChannel创建FileChannel读取内容写入内容关闭FileChannel的位置强制写入两个FileChannel传输数据transferTo方法传输超过2GPath和PathsFiles查找创建拷贝移动删除walkFileTree方法使用walkFileTree统计拷贝多级目录FileChannelFileChannel是一个对文件进行操作的通道,需要注意的是,FileChannel只能在阻塞模式下工作,因此原创 2021-11-11 22:35:07 · 845 阅读 · 0 评论 -
NIO网络编程(三)—— 分散读和集中写
Netty编程(三)—— 分散读和集中写文章目录Netty编程(三)—— 分散读和集中写分散读集中写这一篇博客中想记录下一种思想和方法——分散读和集中写。分散读分散读是当要读取一部分数据,并且这部分数据最后要送入不同的Buffer中,一种方法是先把他全部都进来,然后分给不同的Buffer,另一种就是使用一个channel,将数据直接送入不同的Buffer中,需要注意的是,这些Buffer的大小应该设置成他应该存入数据的大小。channel中有read()函数,参数可以是一个buffer,也可以是一个原创 2021-11-10 15:15:26 · 937 阅读 · 0 评论 -
NIO网络编程(二)—— nio.ByteBuffer基础操作
Netty编程(二)—— nio.ByteBuffer基础操作文章目录Netty编程(二)—— nio.ByteBuffer基础操作总述核心属性创建缓冲区allocateallocateDirectByteBuffer常用方法put()flip()get()rewind()clean()compact()mark()和reset()缓冲区和字符串的相互转换方法一方法二方法三总述流和通道之间的关键区别在于流是基于字节的,而通道是基于块的。流设计为按顺序一个字节接一个字节地传送数据。不同的是,通道会传送缓原创 2021-11-10 10:44:48 · 295 阅读 · 0 评论 -
NIO网络编程(一)—— BIO和NIO
Netty编程(一)—— BIO和NIO文章目录Netty编程(一)—— BIO和NIO什么是BIO伪异步IONIO网络中的阻塞状态三大组件缓冲区 Buffer通道 Channel多路复用器Selector什么是BIO网络编程的基本模型是Client/Server模型,也就是两个进程之间通过网络相互通信,其中服务端提供位置信息(绑定的IP地址和监听端口),客户端通过连接操作向服务端监听的地址发起连接请求,通过三次握手建立连接,如果连接建立成功,双方就可以通过网络套接字(Socket)进行通信。在基于原创 2021-11-09 15:00:48 · 419 阅读 · 0 评论