杂七杂八的

一.Netty

1.netty是一个异步的、基于事件驱动的网络应用框架。快速开发高性能、高可靠的网络IO程序。

二.NIO和BIO的比较

1.BIO以流的方式处理数据,而NIO以块的方式处理数据,块I/O的效率比流I/O的效率高很多

2.BIO是阻塞的,NIO是非阻塞的

3.BIO基于字节流和字符流进行操作,而NIO基于Channel(通道)和Buffer(缓冲区)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。

Selector(选择器)用于监听多个通道的事件,(比如:连接请求、数据到达等),因此使用单个线程就可以监听多个客户端通道。

三.Selector、Channel和Buffer的关系图

关系图说明

1.每个Channel都会对应一个Buffer

2.Selector对应一个线程,一个线程对应对个Channel(连接)

3.该图反应了3个Channel注册到该Selector //程序

4.程序切换到哪个Channel是有事件决定的,Event就是一个重要的概念

5.Selector会根据不同的事件,在各个管道上切换

6.Buffer就是一个内存块,底层是有一个数组

7.数据的读写是通过Buffer,这个BIO要么是输入流,要么是输出流,不能双向,但是NIO的Buffer是可以读也可以写,NIO需要filp方法切换

8.Channel是双向的,可以返回底层操作系统的情况,比如Linux,底层的操作系统通道就是双向的

四.JDK7中 Files--walkFileTree  删除多级目录

Files.walkFileTree(Paths.get("D:\\"), new SimpleFileVisitor<Path>() {

            @Override
            public FileVisitResult visitFile(Path file, BasicFileAttributes attrs) throws IOException {
                //先进入目录里去删文件
                Files.delete(file);
                return super.visitFile(file,attrs);
            }
            @Override
            public FileVisitResult postVisitDirectory(Path dir, IOException exc) throws IOException {
                //再删除目录
                Files.delete(dir);
                return super.postVisitDirectory(dir, exc);
            }
        });

注:删除目录时,目录里有文件不可删除,必须先删除文件。

五.NIO非阻塞--网络原理分析图

 说明:

1.当客户端连接时,会通过ServerSocketChannel得到SocketChannel。

2.将socketChannel注册到Selector上,通过register(Selector selector,int ops)方法,一个selector上可以注册多个SocketChannel。

3.注册后返回一个SelectionKey,会和该Selector关联(集合)。

4.Selector进行监听select方法,返回有时间发生的通道个数,如果没有事件,则会进行阻塞。

5.进一步得到各个SelectionKey(有事件发生的通道的个数)。

6.在通过SelectionKey反向获取SocketChannel,使用方法channel()。

7.可以通过得到的channel完成业务处理。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值