Java NIO 系列教程.pdf

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Java NIO 系列教程

Java NIO 系列教程(一) Java NIO 概述 原文链接 作者:Jakob Jenkov 译者:airu 校对:丁一 Java NIO 由以下几个核心部分组成:  Channels  Buffers  Selectors 虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Selector 构成了核心的API 。 其它组件,如Pipe 和FileLock,只不过是与三个核心组件共同使用的工具类。因此,在概述中我将集中在这三个 组件上。其它组件会在单独的章节中讲到。 Channel 和 Buffer 基本上,所有的 IO 在NIO 中都从一个Channel 开始。Channel 有点象流。 数据可以从Channel 读到Buffer 中,也可以从Buffer 写到Channel 中。这里有个图示: Channel 和Buffer 有好几种类型。下面是JAVA NIO 中的一些主要Channel 的实现:  FileChannel  DatagramChannel  SocketChannel  ServerSocketChannel 正如你所看到的,这些通道涵盖了UDP 和 TCP 网络IO,以及文件IO。 与这些类一起的有一些有趣的接口,但为简单起见,我尽量在概述中不提到它们。本教程其它章节与它们相关的地 方我会进行解释。 以下是Java NIO 里关键的Buffer 实现:  ByteBuffer  CharBuffer  DoubleBuffer  FloatBuffer  IntBuffer  LongBuffer  ShortBuffer 这些Buffer 覆盖了你能通过IO 发送的基本数据类型:byte, short, int, long, float, double 和 char 。 Java NIO 还有个 Mappedyteuffer,用于表示内存映射文件, 我也不打算在概述中说明。 Selector Selector 允许单线程处理多个 Channel。如果你的应用打开了多个连接(通道),但每个连接的流量都很低,使用 Selector 就会很方便。例如,在一个聊天服务器中。 这是在一个单线程中使用一个Selector 处理3 个Channel 的图示: 要使用Selector,得向Selector 注册Channel,然后调用它的select()方法。这个方法会一直阻塞到某个注册的通 道有事件就绪。一旦这个方法返回,线程就可以处理这些事件,事件的例子有如新连接进来,数据接收等。 Java NIO 系列教程(二) Channel 原文链接 作者:Jakob Jenkov 译者:airu 校对:丁一 Java NIO 的通道类似流,但又有些不同:  既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。  通道可以异步地读写。  通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer 中写入。 正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示: Channel 的实现 这些是Java NIO 中最重要的通道的实现:  FileChannel  DatagramChannel  SocketChannel  ServerSocketChannel FileChannel 从文件中读写数据。 DatagramChannel 能通过UDP 读写网络中的数据。 SocketChannel 能通过TCP 读写网络中的数据。 ServerSocketChannel 可以监听新进来的TCP 连接,像Web 服务器那样。对每一个新进来的连接都会创建一个 SocketChannel 。 基本的 Channel 示例 下面是一个使用FileChannel 读取数据到Buffer 中的示例: 01 RandomAccessFile aFile = new RandomAccessFile(data/nio-data.txt, rw); 02 FileChannel inChannel = aFile.getChannel();

文档评论(0)

yaocen + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档