Java之nio

Java NIO

API所在位置:[url]http://dlc.sun.com.edgesuite.net/jdk/jdk-api-localizations/jdk-api-zh-cn/builds/latest/html/zh_CN/api/[/url]

1.java New IO的简称。

2.Java NIO非堵塞应用通常适用用在I/O读写等方面,我们知道,系统运行的性能瓶颈通常在I/O读写,包括对端口和文件的操作上,过去,在打开一个I/O通道后,read()将一直等待在端口一边读取字节内容,如果没有内容进来,

read() 也是傻傻的等,这会影响我们程序继续做其他事情,那么改进做法就是开设线程,让线程去等待,但是这样做也是相当耗费资源的。Java NIO非堵塞技术实际是采取Reactor模式,或者说是Observer模式为我们监察I/O端

口,如果有内容进来,会自动通知我们,这样,我们就不必开启多个线程死等,从外界看,实现了流畅的I/O读写,不堵塞了。来源:http://www.jdon.com/concurrent/nio%D4%AD%C0%ED%D3%A6%D3%C3.htm

3.Channel 和 buffer 是 NIO 是两个最基本的数据类型抽象。

4.Buffer是NIO数据读或写的中转地。

5.Channel是数据的源头或目的地。


Buffer和Channel的关系example:

package sample;


import java.io.FileInputStream;

import java.io.FileOutputStream;

import java.nio.ByteBuffer;

import java.nio.channels.FileChannel;


public class CopyFile {

public static void main(String[] args) throws Exception {

String infile = "C:\\copy.sql";

String outfile = "C:\\copy.txt";

// 获取源文件和目标文件的输入输出流

FileInputStream fin = new FileInputStream(infile);

FileOutputStream fout = new FileOutputStream(outfile);

// 获取输入输出通道

FileChannel fcin = fin.getChannel();

FileChannel fcout = fout.getChannel();

// 创建缓冲区

ByteBuffer buffer = ByteBuffer.allocate(1024);

while (true) {

// clear方法重设缓冲区,使它可以接受读入的数据

buffer.clear();

// 从输入通道中将数据读到缓冲区

int r = fcin.read(buffer);

// read方法返回读取的字节数,可能为零,如果该通道已到达流的末尾,则返回-1

if (r == -1) {

break;

}

// flip方法让缓冲区可以将新读入的数据写入另一个通道

buffer.flip();

// 从输出通道中将数据写入缓冲区

fcout.write(buffer);

}

}

}

来源:[url]http://www.iteye.com/topic/834447[/url]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值