码迷,mamicode.com
首页 > 编程语言 > 详细

JavaIO和JavaNIO

时间:2015-11-24 22:01:15      阅读:202      评论:0      收藏:0      [点我收藏+]

标签:

1、IO的例子

/* 字节IO */
    public void byteIO() throws FileNotFoundException, IOException {
        FileInputStream fin = new FileInputStream(new File(
                "D:\\test\\byteio_in.txt"));
        FileOutputStream fout = new FileOutputStream(new File(
                "D:\\test\\byteio_out.txt"));
        int c = -1;
        while ((c = fin.read()) != -1) {
            fout.write(c);
        }
        fin.close();
        fout.close();
    }

    /* 字符IO */
    public void charIO() throws FileNotFoundException, IOException {
        FileReader reader = new FileReader(new File("D:\\test\\chario_in.txt",
                ""));
        FileWriter writer = new FileWriter(new File("D:\\test\\chario_out.txt"));
        char[] charArr = new char[512];
        while (reader.read(charArr) != -1) {
            writer.write(charArr);
        }
        reader.close();
        writer.close();
    }

    /* bufferIO */
    public void bufferIO() throws FileNotFoundException, IOException {
        BufferedInputStream bufferReader = new BufferedInputStream(
                new FileInputStream("D:\\test\\bufferio_in.txt"));
        BufferedOutputStream bufferWriter = new BufferedOutputStream(
                new FileOutputStream("D:\\test\\bufferio_out.txt"));
        int c = -1;
        while ((c = bufferReader.read()) != -1) {
            bufferWriter.write(c);
        }
        bufferReader.close();
        bufferWriter.close();
    }

2、NIO的例子

/* NIO */
    public void NIO() throws FileNotFoundException, IOException {
        FileInputStream fin = new FileInputStream("D:\\test\\nio_in.txt");
        FileOutputStream fout = new FileOutputStream("D:\\test\\nio_out.txt");
        FileChannel finChannel = fin.getChannel();
        FileChannel foutChannel = fout.getChannel();
        ByteBuffer buffer = ByteBuffer.allocate(512);
        while (finChannel.read(buffer) != 1)//读到缓存
        {
            buffer.flip();//指针跳到缓存头
            foutChannel.write(buffer);
            buffer.clear();//重置缓冲区
        }
        fin.close();
        fout.close();
    }

3、NIO实现非阻塞服务

Java自1.4以后,加入了新IO特性NIO,NIO带来了non-blocking特性。

在之前的服务器处理模型中,在调用ServerSocket.accept()方法时,会一直阻塞到有客户端连接才会返回,每个客户端连接过来后,服务端都会accept一个新连接,接着启动一个线程去处理该客户端的请求。在这个新的线程中,也会在read()方法中阻塞,指导读取完数据。

这样会有什么问题呢?

阻塞导致大量线程资源被浪费;阻塞可导致大量的上下文切换,很多切换其实是无意义的

那么NIO是如何帮助我们解决这种问题的呢?

使用异步 I/O,您可以监听任何数量的通道上的事件,不用轮询,也不用额外的线程。

JavaIO和JavaNIO

标签:

原文地址:http://www.cnblogs.com/mingziday/p/4992998.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!