Java NIO介绍

Channel
Buffer
Selector

Java NIO 由Channel,Buffer和Selector核心部分组成,以下主要介绍这三个组件
一.Channel(通道)
传统IO中的stream是单向的,比如InputStream只能进行读取操作;OutputStream只能进行写操作。
Channel也是类似传统IO中的stream,但是有很大的区别,Channel是双向的,可读可写,提供从文件,网络读取数据的渠道。
常用的几个通道:
~FileChannel:可以从文件读,或者向文件写入数据
~SocketChannel:以TCP来向网络连接的两端读写数据
~ServerSocketChannel:监听客户端发起的TCP连接,并为每个TCP连接创建一个新的SocketChannel来进行数据的读写
~DatagramChannel:以UDP协议来向网络连接的两端读写数据
这些通道覆盖了UDP和TCP网络IO,以及文件IO。

二.Buffer(缓冲区)
读取或者写入的数据都必须经由Buffer。数据从Buffer写到Channel,从Channel读到Buffer
Buffer是一个顶层父类,这是一个抽象类,常用的子类:
~ByteBuffer
~IntBuffer
~CharBuffer
~DoubleBuffer
~FloatBuffer
~LongBuffer
~ShortBuffer
这些Buffer覆盖了可以通过IO发送的基本数据类型:byte,short,int,long,float,double和char

public class Test {
    public static void main(String[] args) throws IOException  {
        File file = new File("data.txt");
        FileOutputStream outputStream = new FileOutputStream(file);
        FileChannel channel = outputStream.getChannel();
        ByteBuffer buffer = ByteBuffer.allocate(1024);
        String string = "java nio";
        buffer.put(string.getBytes());
        buffer.flip();     //此处必须要调用buffer的flip方法
        channel.write(buffer);
        channel.close();
        outputStream.close();
    }  
}

上面的程序会向工程目录下面的data.txt写入字符串”java nio”

三.Selector(选择器)
Selector允许单线程处理多个Channel,使用Selector,需要向Selector注册Channel,然后调用它的select()方法。一旦发现注册的Channel有事件发生,便获取事件进行处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值