zoukankan      html  css  js  c++  java
  • 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)方法。

  • 相关阅读:
    LeetCode Subsets II
    LeetCode Rotate Image
    LeetCode Palidrome Number
    LeetCode Generate Parentheses
    LeetCode Maximum Subarray
    LeetCode Set Matrix Zeroes
    LeetCode Remove Nth Node From End of List
    Linux Loop设备 使用
    Linux 文件系统大小调整
    LeetCode N-Queens II
  • 原文地址:https://www.cnblogs.com/guyexiangyun/p/13864586.html
Copyright © 2011-2022 走看看