互联网
类型
4.3
豆瓣评分
可以朗读
语音朗读
524千字
字数
2018-01-01
发行日期
展开全部
主编推荐语
技术畅销书作者撰写,掌握高并发与网络编程基石技术: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、科普以及教材、教辅等领域。