NIO组件之channel

Posted pu20065226

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NIO组件之channel相关的知识,希望对你有一定的参考价值。

Java NIO指的是new IO ,相对OIO,也称non-blocking IO,对应四种基本IO类型中的IO多路复用,主要有有三大核心组件,Channel(管道),Buffer(缓冲区),selector(选择器)

 

channel相当于传统IO看的输入输出流合集,既可读也可写,有四类,

FileChannel,文件通道,用于文件的数据读写

SocketChannel套接字通道用于socket套接字TCP连接的数据读取,

ServerSocketChannel,服务器套接字通道,允许监听TCP连接请求,为每个监听到的请求,创建一个SocketChannel套接安通道

DatagramChanne数据报通道(UDP协议读取数据)

1.fileChannel实践

package com.example.demo;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

/**
 * Created by Administrator on 2019/9/22.
 */
public class NioChannelTest 
    public static void main(String[] args) 
        fileChannelCopyFile();
    
    public static void fileChannelCopyFile()
        File srcFile=new File("srcFile.txt");
        File destFile=new File("destFile.txt");

        try
            if(!destFile.exists()) destFile.createNewFile();
        catch(Exception e)

        FileInputStream fis=null;
        FileOutputStream fos=null;
        FileChannel inChannel=null;
        FileChannel outChannel=null;
        try
            fis=new FileInputStream(srcFile);
            fos=new FileOutputStream(destFile);
        //通道的获取 inChannel
=fis.getChannel(); outChannel=fos.getChannel(); int length=-1; ByteBuffer buf=ByteBuffer.allocate(1024); while((length=inChannel.read(buf))!=-1) buf.flip(); int outlength=0; //将buf写入到输出通道 while((outlength=outChannel.write(buf))!=0) System.out.println("the byte-len of being wrote"+outChannel); //切换到写入模式,请空buf buf.clear(); //强制刷新到磁盘 outChannel.force(true); catch (Exception e) finally try //关闭通道 outChannel.close(); fos.close(); inChannel.close(); fis.close(); catch (Exception e)

输出:the byte-len of being wrote==29

结果

技术图片

 

以上是关于NIO组件之channel的主要内容,如果未能解决你的问题,请参考以下文章

JAVA NIO 之 Selector 组件

java nio的实现原理

Netty框架之深入了解NIO核心组件

Netty框架之深入了解NIO核心组件

干货|精读Netty源码---NIO之Channel

java之NIO编程