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的主要内容,如果未能解决你的问题,请参考以下文章