没有合适的资源?快使用搜索试试~ 我知道了~
首页java nio教程pdf
信息来自http://ifeve.com/server-socket-channel/ Java NIO: Channels and Buffers(通道和缓冲区) 标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。 Java NIO: Asynchronous IO(异步IO) Java NIO可以让你异步的使用IO,例如:当线程从通道读取数据到缓冲区时,线程还是可以进行其他事情。当数据被写入到缓冲区时,线程可以继续处理它。从缓冲区写入通道也类似。 Java NIO: Selectors(选择器) 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();
03
04
ByteBuffer buf = ByteBuffer.allocate(48);
05
06
int bytesRead = inChannel.read(buf);
07
while (bytesRead != -1) {
08
09
System.out.println("Read " + bytesRead);
10
buf.flip();
11
12
while(buf.hasRemaining()){
13
System.out.print((char) buf.get());
14
}
15
16
buf.clear();
17
bytesRead = inChannel.read(buf);
18
}
19
aFile.close();
注意 buf.flip() 的调用,首先读取数据到 Buffer,然后反转 Buffer,接着再从 Buffer 中读取数据。下一节会深入讲解
Buffer 的更多细节。
Java NIO 系列教程(三) Buffer
原文链接 作者:Jakob Jenkov 译者:airu 校对:丁一
Java NIO 中的 Buffer 用于和 NIO 通道进行交互。如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的。
缓冲区本质上是一块可以写入数据,然后可以从中读取数据的内存。这块内存被包装成 NIO Buffer 对象,并提供了
一组方法,用来方便的访问该块内存。
下面是 NIO Buffer 相关的话题列表:
1. Buffer 的基本用法
2. Buffer 的 capacity,position 和 limit
3. Buffer 的类型
4. Buffer 的分配
5. 向 Buffer 中写数据
6. flip()方法
7. 从 Buffer 中读取数据
剩余36页未读,继续阅读
Ak_Jamie
- 粉丝: 15
- 资源: 15
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论16