Java NIO使用及原理分析(1-4)(转)

转载的原文章也找不到!从以下博客中找到
http://blog.csdn.net/wuxianglong/article/details/6604817

转载自:李会军•宁静致远

最近由于工作关系要做一些Java方面的开发,其中最重要的一块就是JavaNIO(New I/O),尽管很早以前了解过一些,但并没有认真去看过它的实现原理,也没有机会在工作中使用,这次也好重新研究一下,顺便写点东西,就当是自己学习 Java NIO的笔记了。本文为NIO使用及原理分析的第一篇,将会介绍NIO中几个重要的概念。

在Java1.4之前的I/O系统中,提供的都是面向流的I/O系统,系统一次一个字节地处理数据,一个输入流产生一个字节的数据,一个输出流消费一个字节的数据,面向流的I/O速度非常慢,而在Java 1.4中推出了NIO,这是一个面向块的I/O系统,系统以块的方式处理处理,每一个操作在一步中产生或者消费一个数据库,按块处理要比按字节处理数据快的多。

在NIO中有几个核心对象需要掌握:缓冲区(Buffer)、通道(Channel)、选择器(Selector)。

缓冲区Buffer

缓冲区实际上是一个容器对象,更直接的说,其实就是一个数组,在NIO库中,所有数据都是用缓冲区处理的。在读取数据时,它是直接读到缓冲区中的; 在写入数据时,它也是写入到缓冲区中的;任何时候访问 NIO 中的数据,都是将它放到缓冲区中。而在面向流I/O系统中,所有数据都是直接写入或者直接将数据读取到Stream对象中。

);

  • for (int i = 0; i < buffer.capacity(); ++i) {
  • int j = 2 * (i + 1);
  • // 将给定整数写入此缓冲区的当前位置,当前位置递增
  • buffer.put(j);
  • }
  • // 重设此缓冲区,将限制设置为当前位置,然后将当前位置设置为0
  • buffer.flip();
  • // 查看在当前位置和限制位置之间是否有元素
  • while (buffer.hasRemaining()) {
  • // 读取此缓冲区当前位置的整数,然后当前位置递增
  • int j = buffer.get();
  • System.out.print(j + "  ");
  • }
  • }
  • }
  • );

  • // 读取数据到缓冲区
  • fc.read(buffer);
  • buffer.flip();
  • while (buffer.remaining()>0) {
  • byte b = buffer.get();
  • System.out.print(((char)b));
  • }
  • fin.close();
  • }
  • }
  • 上一篇:Java 并发工具包 java.util.concurrent 用户指南


    下一篇:HDU 4267 A Simple Problem with Integers(2012年长春网络赛A 多颗线段树+单点查询)