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写入文件