nio学习

1. IO与NIO

在io中核心概念是流,要么是输入要么是输出,不能同时输入输出
在NIO中拥有三个核心概念: 
    1. selector 选择器
    2. channel 通道
    3. buffer 缓冲区
NIO 是面向块(block)或者缓冲区(buffer)编程的,
buffer 本身是一块内存,底层实现是一块数组,
底层 读写 是通过buffer实现的

java中的原生类型都有对应的buffer 
    如 intBuffer
channel是指可以从中读取或者写入数据的对象,所有数据的读写都是通过
buffer来进行的,
channel是双向的,拥有读写的双向功能 。

2. nio示例一

1
2
3
4
5
6
7
8
9
10
11
12
13
14
FileInputStream fisl = new FileInputStream("niotest.txt");

FileChannel channel = fisl.getChannel();

ByteBuffer buffer = ByteBuffer.allocate(512);

channel.read(buffer);

buffer.flip();


while (buffer.hasRemaining()) {
System.out.print((char) buffer.get());
}

3. nio 示例二

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public static void main(String[] args) throws Exception {

FileOutputStream fos = new FileOutputStream("niotext.txt");

FileChannel channel = fos.getChannel();

ByteBuffer buffer = ByteBuffer.allocate(512);

buffer.put("hello nio test ".getBytes());

buffer.flip();

channel.write(buffer);

fos.close();

}
总结: 
    以上两个例子,我们对文件的操作都是通过channel和buffer来实现的
    
读文件: 
    首先通过channel把的文件内容写到buffer,然后通过buffer获取
    
写文件: 
    首先把内容写到buffer,然后通过channel写入文件