美文网首页
Java NIO-Channel

Java NIO-Channel

作者: zhanglbjames | 来源:发表于2017-06-30 16:40 被阅读0次

    Channel(通道)是对原始IO对象的抽象,Channel的一端对应着一个原始IO对象,一端对应着一个Buffer对象。

    特性

    1. 通道可以是单向的也可以是双向的(IO流对象读写都是单向的),一个通道实现了ReadableByteChannel接口那么这个通道就是可读的(read方法),实现了WritableByteChannel接口那么就是可写的(write方法);同时实现了两个接口就是双向通道,只实现一个接口就是单向通道。


    2. 每一个file或者socket通道都实现了上述的接口,都可以获取其对应的双向通道,但是需要注意的是socket通道是双向打开的,但是对于file来说只是从类的定义上来说是双向通道,但是在实际使用时并不是双向的,而是单向的,比如从FileInputStream对象获取FIleChannel,这个FIleChannel对象是只读的,即只能调用read方法,而不能调用write方法,当调用write方法将抛出NonWritableChannelException异常,这是因为FileInputStream总是以read-only权限打开的。

    3. 通道可以是异步的也可以是同步的。

    4. 通道可以是阻塞的也可以是非阻塞

    阻塞IO会在read或者write方法处阻塞,直到有流可读或者将流写入操作系统完成,可以通过Channel.configureBlocking(false)设置为非阻塞(注意FileChannel不能切换为非阻塞模式,而套接字通道可以)非阻塞IO不会在read或者write方法或者accept方法处阻塞,而是会立刻返回。

    常用的Channel类型

    [异步]Channel

    1. [Asynchronous]FileChannel

    FileChannel 从文件中读写数据

    1. [Asynchronous]DatagramChannel

    DatagramChannel 能通过UDP读写网络中的数据

    1. [Asynchronous]SocketChannel

    SocketChannel 能通过TCP读写网络中的数据

    1. [Asynchronous]ServerSocketChannel

    ServerSocketChannel可以监听新进来的TCP连接,像Web服务器那样。对每一个新进来的连接都会创建一个SocketChannel

    使用示例

    FileChannel和MappedByteBuffer的示例


    相关文章

      网友评论

          本文标题:Java NIO-Channel

          本文链接:https://www.haomeiwen.com/subject/grqicxtx.html