• Netty知识点总结(一)——NIO


    1. Buffer与Channel

    Java5中新增了nio包。与传统的BIO相比,NIO的效率更快。
    NIO是面向缓冲区编程的,而传统的BIO是面向流的编程。
    BIO中的数据是直接从流中读取和写出的,流是单向的,创建一个流对象只能完成读取或写出其中的一种任务。流对象既负责与文件/套接字连接,也要负责数据的读写。
    而NIO中将数据的读写和连接分开,缓冲区(Buffer)只负责数据的存取,通道(Channel)只负责与文件/套接字建立连接。通道可以是双向的。

    尚硅谷的老师对BIO和NIO有一个形象的比喻:
    BIO就像是水龙头,数据就是水流,打开龙头,水流只能向一个方向流动;
    NIO就像是铁路,Channel就是连接文件与内存之间的铁轨,而Buffer就是在这个铁轨上进行运输的火车。数据由火车运载,在内存/文件中的某一处装载数据,在另一处卸载数据。

    1.1. Channel的read()和write()

    创建一个Channel对象可以用如下方法:

    FileChannel inChannel = new FileInputStream("01.txt").getChannel();
    FileChannel outChannel = new FileOutputStream("02.txt").getChannel();
    

    从输入流中获取的Channel是只读的,只能调用其read方法;从输出流中获取的Channel是只可写的,只能调用其write方法。

    从Channel打开的连接中读取数据,并向Buffer中存入,这个过程是从外部读取数据到Java程序中(向内存中),因此调用的是:channel.read(destBuffer)方法。
    从Buffer中拿到(读取)数据,并向Channel打开的连接中写入,这个过程是从Java程序中(内存)向外部写出数据,因此调用的是:channel.write(srcBuffer)方法。

  • 相关阅读:
    SQLSERVER查询数据库文件大小
    SQLSERVER 检查内容
    20万DBA都在关注的12个问题 [转载]
    oswbb工具分析主机性能
    Suspending MMON slave action kewrmapsa_ for 82800 seconds
    一次direct path read 故障处理
    Auto Optimizer Stats Collection in 12c
    ORACLE 动态注册和静态注册的区别(转)
    记一次cursor pin s wait on X的处理
    树莓派3b的raspberrypi系统安装pip
  • 原文地址:https://www.cnblogs.com/guyexiangyun/p/13864586.html
Copyright © 2020-2023  润新知