java nio

2014-11-24 08:54:10 · 作者: · 浏览: 1
Java NIO非堵塞应用通常适用用在I/O读写等方面,我们知道, 系统运行的性能瓶颈通常在I/O读写,包括对端口和文件的操作上,过去,在打开一个I/O通道后,read()将一直等待在端口一边读取字节内容,如果没有内容进来,read()也是傻傻的等,这会影响我们程序继续做其他事情,那么改进做法就是开设线程,让线程去等待,但是这样做也是相当耗费资源的。
Java NIO非堵塞技术实际是采取Reactor模式,或者说是Observer模式为我们监察I/O端口,如果有内容进来,会自动通知我们。
package com.java.xiong.file15;  
  
import java.io.File;  
import java.io.FileInputStream;  
import java.io.FileOutputStream;  
import java.nio.CharBuffer;  
import java.nio.MappedByteBuffer;  
import java.nio.channels.FileChannel;  
import java.nio.charset.Charset;  
import java.nio.charset.CharsetDecoder;  
  
public class FileChanelTest {  
    private static FileInputStream fileInputStream;  
    private static FileOutputStream fileOutputStream;  
  
    public static void main(String[] args) {  
  
        File files = new File("src/com/java/xiong/file15/FileChanelTest.java");  
        File filess = new File("1.txt");  
        try {  
  
            fileInputStream = new FileInputStream(files);  
            FileChannel filein = fileInputStream.getChannel();  
            fileOutputStream = new FileOutputStream(filess);  
            FileChannel fileout = fileOutputStream.getChannel();  
            MappedByteBuffer mapin = filein.map(FileChannel.MapMode.READ_ONLY,  
                    0, files.length());  
            // 使用GBK来创建解码  
            Charset cset = Charset.forName("GBK");  
            fileout.write(mapin);  
            // 将Buffer 界限和位置复原  
            mapin.clear();  
            // 创建解码对象  
            CharsetDecoder chard = cset.newDecoder();  
            // byteBuffer转换成charBuffer  
            CharBuffer charc = chard.decode(mapin);  
            System.out.println(charc.toString());  
  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
  
}