6 NIO 案例解析与高性能聊天室实战
6 NIO 案例解析与高性能聊天室实战
1 概述
略。
2 阻塞式数据传输:I/O 核心思想与文件传输案例
略。
2.1 I/O 设计的核心思想:装饰模型
- 范例 1 代码(装饰模型)
com.bltj.ch06.decorator.Test
。
2.2 I/O 应用案例:远程传输文件
- 范例 2 代码(文件传输-服务端)
com.bltj.ch06.io.MyServer
。 - 范例 2 代码(文件传输-客户端)
com.bltj.ch06.io.MyClient
。
3 非阻塞式数据传输:NIO 详解与案例演示
3.1 NIO 数据存储结构:缓冲区 Buffer
- 范例 3 代码(Buffer 操作)
com.bltj.ch06.nio.NIODemo.test1()
。 - 范例 4 代码(Buffer 存储各类型数据)
com.bltj.ch06.nio.NIODemo02.test7()
。
3.2 缓冲区的搬运工:通道 Channel
- 范例 5 代码(文件复制-使用非直接缓冲区)
com.bltj.ch06.nio.NIODemo.test2()
。 - 范例 5 代码(文件复制-使用直接缓冲区)
com.bltj.ch06.nio.NIODemo.test2_2()
。减少了中间copy过程,极大得提高了读写效率。
3.3 通过零拷贝实现高性能文件传输
- 范例 6 代码(文件复制-使用直接缓冲区 + 内存映射)
com.bltj.ch06.nio.NIODemo.test3()
。 - 范例 7 代码(文件修改-使用直接缓冲区 + MappedByteBuffer)
com.bltj.ch06.nio.NIODemo02.test4()
。 - 范例 8 代码(文件复制-零拷贝)
com.bltj.ch06.nio.NIODemo.test4()
。 - 范例 9 代码(NIO 文件传输-服务端)
com.bltj.ch06.nio.NIOSendFile.server()
。 - 范例 9 代码(NIO 文件传输-客户端)
com.bltj.ch06.nio.NIOSendFile.client()
。 - 范例 10 代码(并发售票-客户端使用直接缓冲区)
com.bltj.ch06.nio.NIOSendFile.client2()
。服务端不知道文件大小,因此此场景服务端不适合使用直接缓冲区。 - 范例 11 代码(资源加锁)
com.bltj.ch06.nio.FileLockTest
。
3.4 规范读写的构建:管道 Pipe
- 范例 12 代码(Pipe 操作)
com.bltj.ch06.nio.NIODemo.testPipe()
。
3.5 结合选择器 Select 开发高性能聊天室
- 范例 13 代码(NIO 聊天室-服务端)
com.bltj.ch06.nio.ChatServer
。 - 范例 13 代码(NIO 聊天室-客户端)
com.bltj.ch06.nio.ChatClient
。 - 范例 14 代码(多缓冲区操作)
com.bltj.ch06.nio.NIOServerWith2Buffers
。
4 异步非阻塞式数据传输:AIO 的两种实现方式
- 范例 15 代码(AIO 操作)
com.bltj.ch06.nio.NIOServerWith2Buffers
。 - 范例 16 代码(AIO 通信-服务端)
com.bltj.ch06.aio.AIOServer
。 - 范例 16 代码(AIO 通信-客户端)
com.bltj.ch06.aio.AIOClient
。
5 编码解码
- 范例 17 代码(查看当前环境默认的编码类型)
com.bltj.ch06.nio.NIOCoder.test1()
。 - 范例 18 代码(对字符串进行编码和解码操作)
com.bltj.ch06.nio.NIOCoder.test21()
。 - 范例 19 代码(使用 ISO-8859-1 对中文进行编码解码)
com.bltj.ch06.nio.NIOCoder.test3()
。
参考文献
- [亿级流量 Java 高并发与编程实战]