Java NIO介绍

来源:互联网 发布:淘宝服务中心首页 编辑:程序博客网 时间:2024/06/04 18:24
ChannelBufferSelector

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有事件发生,便获取事件进行处理

0 0