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)方法。

  • 相关阅读:
    变量
    匿名函数与内建函数
    Datanode denied communication with namenode because hostname cannot be resol
    0003.搭建Hadoop的环境
    0001.大数据课程概述与大数据背景知识
    享学首创年薪阿里60W+/对标P7岗移动 架构师成长路线V3.0 ---- Android移动互联网架构开发
    FFmpeg和WebRTC的区别
    查看每个文件下内存占用大小
    linux 删除中文乱码
    FFmpeg 命令大全
  • 原文地址:https://www.cnblogs.com/guyexiangyun/p/13864586.html
Copyright © 2011-2022 走看看