展开全部

主编推荐语

技术畅销书作者撰写,掌握高并发与网络编程基石技术:NIO与Socket。

内容简介

本书细化到特性级别,涵盖缓冲区、通道、选择器以及基于Socket 的TCP/IP和UDP编程。本书共6章,具体内容如下。第1章讲解了NIO中的缓冲区,包括核心API的使用。第2章讲解了NIO中的Channel通道类的继承关系、核心接口的作用,着重介绍 FileChannel类的使用。第3章涵盖NetworkInterface类获得网络接口的信息、InetAddress和InterfaceAddress类的常见API。第4章中讲解使用Java语言实现Socket通信,基于TCP/IP和UDP协议进行实现。将相关类的全部API进行了介绍,学习后阅读相关的网络框架的源代码、Java高性能后台处理才不会迷茫。第5章中讲解了NIO技术中非常重要的Selector选择器技术,“多路复用”精髓在此体现的,本章也是大幅提升程序运行的效率之关键。第6章异步IO(AIO),在NIO的基础上实现异步执行、回调处理等高级功能,是Java高级程序员,架构师等必须要掌握的技术。

目录

  • 版权信息
  • 前言
  • 为什么要写这本书
  • 本书特色
  • 读者对象
  • 如何阅读本书
  • 勘误和支持
  • 致谢
  • 第1章 缓冲区的使用
  • 1.1 NIO概述
  • 1.2 缓冲区介绍
  • 1.3 Buffer类的使用
  • 1.3.1 包装数据与获得容量
  • 1.3.2 限制获取与设置
  • 1.3.3 位置获取与设置
  • 1.3.4 剩余空间大小获取
  • 1.3.5 使用Buffer mark()方法处理标记
  • 1.3.6 知识点细化测试
  • 1.3.7 判断只读
  • 1.3.8 直接缓冲区
  • 1.3.9 还原缓冲区的状态
  • 1.3.10 对缓冲区进行反转
  • 1.3.11 判断是否有底层实现的数组
  • 1.3.12 判断当前位置与限制之间是否有剩余元素
  • 1.3.13 重绕缓冲区
  • 1.3.14 获得偏移量
  • 1.3.15 使用List.toArray(T[])转成数组类型
  • 1.4 ByteBuffer类的使用
  • 1.4.1 创建堆缓冲区与直接缓冲区
  • 1.4.2 直接缓冲区与非直接缓冲区的运行效率比较
  • 1.4.3 包装wrap数据的处理
  • 1.4.4 put(byte b)和get()方法的使用与position自增特性
  • 1.4.5 put(byte[]src,int offset,int length)和get(byte[]dst,int offset,intlength)方法的使用
  • 1.4.6 put(byte[]src)和get(byte[]dst)方法的使用
  • 1.4.7 put(int index,byte b)和get(int index)方法的使用与position不变
  • 1.4.8 put(ByteBuffer src)方法的使用
  • 1.4.9 putType()和getType()方法的使用
  • 1.4.10 slice()方法的使用与arrayOffSet()为非0的测试
  • 1.4.11 转换为CharBuffer字符缓冲区及中文的处理
  • 1.4.12 转换为其他类型的缓冲区
  • 1.4.13 设置与获得字节顺序
  • 1.4.14 创建只读缓冲区
  • 1.4.15 压缩缓冲区
  • 1.4.16 比较缓冲区的内容
  • 1.4.17 复制缓冲区
  • 1.4.18 对缓冲区进行扩容
  • 1.5 CharBuffer类的API使用
  • 1.5.1 重载append(char)/append(CharSequence)/append(CharSequence,start,end)方法的使用
  • 1.5.2 读取相对于当前位置的给定索引处的字符
  • 1.5.3 put(String src)、int read(CharBuffer target)和subSequence(int start,int end)方法的使用
  • 1.5.4 static CharBuffer wrap(CharSequence csq,int start,int end)方法的使用
  • 1.5.5 获得字符缓冲区的长度
  • 1.6 小结
  • 第2章 通道和FileChannel类的使用
  • 2.1 通道概述
  • 2.2 通道接口的层次结构
  • 2.2.1 AsynchronousChannel接口的介绍
  • 2.2.2 AsynchronousByteChannel接口的介绍
  • 2.2.3 ReadableByteChannel接口的介绍
  • 2.2.4 ScatteringByteChannel接口的介绍
  • 2.2.5 WritableByteChannel接口的介绍
  • 2.2.6 GatheringByteChannel接口的介绍
  • 2.2.7 ByteChannel接口的介绍
  • 2.2.8 SeekableByteChannel接口的介绍
  • 2.2.9 NetworkChannel接口的介绍
  • 2.2.10 MulticastChannel接口的介绍
  • 2.2.11 InterruptibleChannel接口的介绍
  • 2.3 AbstractInterruptibleChannel类的介绍
  • 2.4 FileChannel类的使用
  • 2.4.1 写操作与位置的使用
  • 2.4.2 读操作
  • 2.4.3 批量写操作
  • 2.4.4 批量读操作
  • 2.4.5 部分批量写操作
  • 2.4.6 部分批量读操作
  • 2.4.7 向通道的指定position位置写入数据
  • 2.4.8 读取通道指定位置的数据
  • 2.4.9 设置位置与获得大小
  • 2.4.10 截断缓冲区
  • 2.4.11 将数据传输到其他可写入字节通道
  • 2.4.12 将字节从给定可读取字节通道传输到此通道的文件中
  • 2.4.13 执行锁定操作
  • 2.4.14 FileLock lock()方法的使用
  • 2.4.15 获取通道文件给定区域的锁定
  • 2.4.16 FileLock tryLock()方法的使用
  • 2.4.17 FileLock类的使用
  • 2.4.18 强制将所有对通道文件的更新写入包含文件的存储设备
  • 2.4.19 将通道文件区域直接映射到内存
  • 2.4.20 打开一个文件
  • 2.4.21 判断当前通道是否打开
  • 2.5 小结
  • 第3章 获取网络设备信息
  • 3.1 NetworkInterface类的常用方法
  • 3.1.1 获得网络接口的基本信息
  • 3.1.2 获取MTU大小
  • 3.1.3 子接口的处理
  • 3.1.4 获得硬件地址
  • 3.1.5 获得IP地址
  • 3.1.6 InterfaceAddress类的使用
  • 3.1.7 判断是否为点对点设备
  • 3.1.8 是否支持多播
  • 3.2 NetworkInterface类的静态方法
  • 3.2.1 根据索引获得NetworkInterface对象
  • 3.2.2 根据网络接口名称获得NetworkInterface对象
  • 3.2.3 根据IP地址获得NetworkInterface对象
  • 3.3 小结
  • 第4章 实现Socket通信
  • 4.1 基于TCP的Socket通信
  • 4.1.1 验证ServerSocket类的accept()方法具有阻塞特性
  • 4.1.2 验证Socket中InputStream类的read()方法也具有阻塞特性
  • 4.1.3 客户端向服务端传递字符串
  • 4.1.4 服务端向客户端传递字符串
  • 4.1.5 允许多次调用write()方法进行写入操作
  • 4.1.6 实现服务端与客户端多次的往来通信
  • 4.1.7 调用Stream的close()方法造成Socket关闭
  • 4.1.8 使用Socket传递PNG图片文件
  • 4.1.9 TCP连接的3次“握手”过程
  • 4.1.10 标志位SYN与ACK值的自增特性
  • 4.1.11 TCP断开连接的4次“挥手”过程
  • 4.1.12 “握手”的时机与立即传数据的特性
  • 4.1.13 结合多线程Thread实现通信
  • 4.1.14 服务端与客户端互传对象以及I/O流顺序问题
  • 4.2 ServerSocket类的使用
  • 4.2.1 接受accept与超时Timeout
  • 4.2.2 构造方法的backlog参数含义
  • 4.2.3 参数backlog的默认值
  • 4.2.4 构造方法ServerSocket(int port,int backlog,InetAddress bindAddr)的使用
  • 4.2.5 绑定到指定的Socket地址
  • 4.2.6 绑定到指定的Socket地址并设置backlog数量
  • 4.2.7 获取本地SocketAdress对象以及本地端口
  • 4.2.8 InetSocketAddress类的使用
  • 4.2.9 关闭与获取关闭状态
  • 4.2.10 判断Socket绑定状态
  • 4.2.11 获得IP地址信息
  • 4.2.12 Socket选项ReuseAddress
  • 4.2.13 Socket选项ReceiveBufferSize
  • 4.3 Socket类的使用
  • 4.3.1 绑定bind与connect以及端口生成的时机
  • 4.3.2 连接与超时
  • 4.3.3 获得远程端口与本地端口
  • 4.3.4 获得本地InetAddress地址与本地SocketAddress地址
  • 4.3.5 获得远程InetAddress与远程SocketAddress()地址
  • 4.3.6 套接字状态的判断
  • 4.3.7 开启半读与半写状态
  • 4.3.8 判断半读半写状态
  • 4.3.9 Socket选项TcpNoDelay
  • 4.3.10 Socket选项SendBufferSize
  • 4.3.11 Socket选项Linger
  • 4.3.12 Socket选项Timeout
  • 4.3.13 Socket选项OOBInline
  • 4.3.14 Socket选项KeepAlive
  • 4.3.15 Socket选项TrafficClass
  • 4.4 基于UDP的Socket通信
  • 4.4.1 使用UDP实现Socket通信
  • 4.4.2 测试发送超大数据量的包导致数据截断的情况
  • 4.4.3 Datagram Packet类中常用API的使用
  • 4.4.4 使用UDP实现单播
  • 4.4.5 使用UDP实现广播
  • 4.4.6 使用UDP实现组播
  • 4.5 小结
  • 第5章 选择器的使用
  • 5.1 选择器与I/O多路复用
  • 5.2 核心类Selector、SelectionKey和Sel-ectableChannel的关系
  • 5.3 通道类AbstractInterruptibleChannel与接口InterruptibleChannel的介绍
  • 5.4 通道类SelectableChannel的介绍
  • 5.5 通道类AbstractSelectableChannel的介绍
  • 5.6 通道类ServerSocketChannel与接口NetworkChannel的介绍
  • 5.7 ServerSocketChannel类、Selector和SelectionKey的使用
  • 5.7.1 获得ServerSocketChannel与ServerSocket socket对象
  • 5.7.2 执行绑定操作
  • 5.7.3 执行绑定操作与设置backlog
  • 5.7.4 阻塞与非阻塞以及accept()方法的使用效果
  • 5.7.5 获得Selector对象
  • 5.7.6 执行注册操作与获得SelectionKey对象
  • 5.7.7 判断注册的状态
  • 5.7.8 将通道设置成非阻塞模式再注册到选择器
  • 5.7.9 使用configureBlocking(false)方法解决异常
  • 5.7.10 判断打开的状态
  • 5.7.11 获得阻塞锁对象
  • 5.7.12 获得支持的SocketOption列表
  • 5.7.13 获得与设置SocketOption
  • 5.7.14 获得SocketAddress对象
  • 5.7.15 阻塞模式的判断
  • 5.7.16 根据Selector找到对应的SelectionKey
  • 5.7.17 获得SelectorProvider对象
  • 5.7.18 通道注册与选择器
  • 5.7.19 返回此通道所支持的操作
  • 5.7.20 执行Connect连接操作
  • 5.7.21 判断此通道上是否正在进行连接操作
  • 5.7.22 完成套接字通道的连接过程
  • 5.7.23 类FileChannel中的long transferTo(position,count,WritableByte-Channel)方法的使用
  • 5.7.24 方法public static SocketChannel open(SocketAddress remote)与Socket-Option的执行顺序
  • 5.7.25 传输大文件
  • 5.7.26 验证read和write方法是非阻塞的
  • 5.8 Selector类的使用
  • 5.8.1 验证public abstract int select()方法具有阻塞性
  • 5.8.2 select()方法不阻塞的原因和解决办法
  • 5.8.3 出现重复消费的情况
  • 5.8.4 使用remove()方法解决重复消费问题
  • 5.8.5 验证产生的set1和set2关联的各自对象一直是同一个
  • 5.8.6 int selector.select()方法返回值的含义
  • 5.8.7 从已就绪的键集中获得通道中的数据
  • 5.8.8 对相同的通道注册不同的相关事件返回同一个SelectionKey
  • 5.8.9 判断选择器是否为打开状态
  • 5.8.10 获得SelectorProvider provider对象
  • 5.8.11 返回此选择器的键集
  • 5.8.12 public abstract int select(long timeout)方法的使用
  • 5.8.13 public abstract int selectNow()方法的使用
  • 5.8.14 唤醒操作
  • 5.8.15 测试若干细节
  • 5.9 SelectionKey类的使用
  • 5.9.1 判断是否允许连接SelectableChannel对象
  • 5.9.2 判断是否已准备好进行读取
  • 5.9.3 判断是否已准备好进行写入
  • 5.9.4 返回SelectionKey关联的选择器
  • 5.9.5 在注册操作时传入attachment附件
  • 5.9.6 设置attachment附件
  • 5.9.7 获取与设置此键的interest集合
  • 5.9.8 判断此键是否有效
  • 5.9.9 获取此键的ready操作集合
  • 5.9.10 取消操作
  • 5.10 DatagramChannel类的使用
  • 5.10.1 使用DatagramChannel类实现UDP通信
  • 5.10.2 连接操作
  • 5.10.3 断开连接
  • 5.10.4 将通道加入组播地址
  • 5.10.5 将通道加入组播地址且接收指定客户端数据
  • 5.11 Pipe.SinkChannel和Pipe.SourceChannel类的使用
  • 5.12 SelectorProvider类的使用
  • 5.13 小结
  • 第6章 AIO的使用
  • 6.1 AsynchronousFileChannel类的使用
  • 6.1.1 获取此通道文件的独占锁
  • 6.1.2 获取通道文件给定区域的锁
  • 6.1.3 实现重叠锁定
  • 6.1.4 返回此通道文件当前大小与通道打开状态
  • 6.1.5 CompletionHandler接口的使用
  • 6.1.6 public void failed(Throwable exc,A attachment)方法调用时机
  • 6.1.7 执行指定范围的锁定与传入附件及整合接口
  • 6.1.8 执行锁定与传入附件及整合接口CompletionHandler
  • 6.1.9 lock(position,size,shared,attachment,CompletionHandler)方法的特点
  • 6.1.10 读取数据方式1
  • 6.1.11 读取数据方式2
  • 6.1.12 写入数据方式1
  • 6.1.13 写入数据方式2
  • 6.2 AsynchronousServerSocketChannel和AsynchronousSocketChannel类的使用
  • 6.2.1 接受方式1
  • 6.2.2 接受方式2
  • 6.2.3 重复读与重复写出现异常
  • 6.2.4 读数据
  • 6.2.5 写数据
  • 6.3 同步、异步、阻塞与非阻塞之间的关系
  • 6.4 小结
展开全部

评分及书评

尚无评分
目前还没人评分

出版方

机械工业出版社有限公司

机械工业出版社是全国优秀出版社,自1952年成立以来,坚持为科技、为教育服务,以向行业、向学校提供优质、权威的精神产品为宗旨,以“服务社会和人民群众需求,传播社会主义先进文化”为己任,产业结构不断完善,已由传统的图书出版向着图书、期刊、电子出版物、音像制品、电子商务一体化延伸,现已发展为多领域、多学科的大型综合性出版社,涉及机械、电工电子、汽车、计算机、经济管理、建筑、ELT、科普以及教材、教辅等领域。