Java之nio

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

  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);

			}

		}

	}

来源: http://www.iteye.com/topic/834447

你可能感兴趣的:(java,jdk,sql,C++,c)