7fdba8d1224800fa764621baef51f67c.pdf
- 文档编号:18850165
- 上传时间:2024-01-28
- 格式:PDF
- 页数:459
- 大小:214.05MB
7fdba8d1224800fa764621baef51f67c.pdf
《7fdba8d1224800fa764621baef51f67c.pdf》由会员分享,可在线阅读,更多相关《7fdba8d1224800fa764621baef51f67c.pdf(459页珍藏版)》请在冰点文库上搜索。
版权相关注意事项:
1、书籍版权归著者和出版社所有2、本PDF来自于各个广泛的信息千台,经过整理而成3、本PDF仅限用于非商业用途或者个人交流研究学习使用4、本PDF获得者不得在互联网上以任何目的进行传播5、如果觉得书籍内容很赞,请一定购买正版实体书,多多支持编写高质量的图书的作者和相应的出版社!
当然,如果图书内容不堪入目,质量低下,你也可以选择狠狠滴撕裂本PDF6、技术类书籍是拿来获取知识的,不是拿来收藏的,你得到了书籍不意味着你得到了知识,所以请不要得到书籍后就觉得沾沾自喜,要经常翻阅!
经常翻阅7、请于下载PDF后24小时内研究使用并删掉本PDF仅供非商业用途或交流学习使用技术畅销书作者撰写,掌握高并发与网络蝙程基石技术:
NIO与Socket细化到特性级别,涵盖领域中核心技术,包括缓冲区、通道、选择器以及基于Socket的TCP/IP和UDP编程嘻罗:
血门NIO与Socket编程技术指南NIOandSocketProgrammingTechnicalGuide高洪岩著版R山自业J工u械一1封L他1.仅供非商业用途或交流学习使用内容简介技术畅销书作者撰写,掌握高并发与网络编程基石技术:
NIO与Socket。
细化到特性级别,涵盖缰;中区、通道、选择器以及基于Socket的TCP/IP和UDP编程。
本书共6章,具体内窑如下。
第1章讲解了NIO中的缰;中区,包括核心API的使用。
第2章讲解了NIO中的Channeli董类的继承关系、核心接口的作用,着重介绍FileChannel类的使用。
第3章涵盖利用Netwoklnteface类藏得网络接口信息方法、lnetAddess和lntefaceAddess类的常见API。
第4章讲解使用Java语言实现Socket通信,基于TCP/IP和UDP协议进行实现。
将相关类的全部API进行了介绍3学习后阅读相关的网络框架的源代码、Java高性能后台处理才不会迷茫。
第5童讲解了NIO技术中非常重要的Selecto选择器技术,“多路复用”精髓在此体现,本章也是大幅提升程序运行效率之关键。
第6章i井解异步1/0(AIO),旨在NIO的基础上实现异步执行、回调处理等高级功能,是Java高级程序员、架构师等必须要掌握的技术。
E旦回供非商业用途或交流学习使用E画画”仅供非商业用途或交流学习使用仅供非商业用途或交流学习使用嘻PNIO与Socket编程技术指南NIOandSocketPogammingTechnicalGuide高洪岩善r*1机械工业出版社气工fChinaMachinePess仅供非商业用途或交流学习使用仅供非商业用途或交流学习使用图书在版编自(CIP)数据NIO与Socket编程技术指南高洪岩著一北京:
机械工业出版社,2018.7(Java核心技术系列)ISBN978-7111-60406-8I.NII.高Ill.JAVA语言一程序设计一指南IV.TP312.8-62中国版本图书馆CIP数据核字(2018)第141692号NIO与Socket编程技术指南出版发行:
机械工业出版社(北京市西城区胃万庄大街22号邮政编码。
100037)责任编辑:
高娟雅责任校对:
李秋荣印刷三河市宏图印务有限公司开本:
186mm240mm1/16版次:
2018年7月第1版第l次印刷印张:
28.25书号:
ISBN978-7-111-60406-8定价:
99.00元凡购本书,如有缺页、倒页、脱页,由本社发行部调换客服热线(010)8837942688361066投稿热线(010)88379604购书热线:
(010)683262948837964968995259读者信箱:
版权所有侵权必究封底无防伪标均为盗版本书法律顾问:
北京大成律师耶务所韩光邹晓东仅供非商业用途或交流学习使用仅供非商业用途或交流学习使用7冯你阶前,E司为什么要写这本书早在几年前,笔者就曾想过整理一份基于Java语言的NIO与Socket相关的稿件,因为市面上大部分的Java书籍都是以l章或2章的篇幅介绍NIO与Socket技术,并没有完整地覆盖该技术的知识点,而限于当时的时间及精力,一直没有如愿。
机会终于来了,公司要搭建基础构架知识体系,我负责公司该技术方向的培训,这重燃了我对NIO和Socket技术的热情。
在学习Java技术的过程中,当学习了JavaSE/JavaEE之后想探索更深层次的技术,如大数据、分布式和高并发类等,可能会遇到针对NIO、Socket的学习,但NIO和Socket技术的学习并不像JDBC一样简单,学习NIO和Socket时可能要遇到很多的问题。
为了在该技术领域有更高的追求,我将NIO和Socket的技术点以教案的方式进行了整理,并在公司中与同事一起进行学习和交流,同事的反响非常热烈。
若干年前的心愿终于达成,同事们也很期待这本书能早日出版发行,那样他们就有真正的纸质参考资料了。
希望本书能够受到其他学习NIO和Socket的读者喜爱,这是我最大的心愿。
本书介绍NIO和Socket开发中最值得关注的内容,并给出个人的一些想法和见解,希望拓宽读者的学习思路。
在学习NIO和Socket技术之前,建议先了解一下多线程与并发相关的知识,这对设计和理解代码有非常大的帮助。
多线程方面的资料推荐Java多线程编程核心技术,并发相关的资料推荐Java并发编程:
核心方法与框架,这两本书都是笔者编著的,希望可以给读者带来一些帮助。
本书特色在本书写作的过程中,我尽量做到言简意贩,并且全部用演示案例的方式来讲解技术知仅供非商业用途或交流学习使用仅供非商业用途或交流学习使用IV识点,使读者看到代码及运行结果后就可以知道此项目要解决的是什么问题。
这类似于网络中的博客风格,让读者用最短的时间学习知识点,明白知识点的应用方式及使用时的注意事项,取得快速学习并解决相应问题的效果。
读者对象口Java程序员口系统架构师口大数据开发者口其他对NIO和Socket技术感兴趣的人员如何阅读本书本着实用、易懂的学习原则,本书通过6章内容来介绍Java多线程相关的技术。
第l章介绍NIO技术中的缓冲区,包括Buffi町、ByteBuff1町、CharBuffer类的核心API的使用。
第2章介绍NIO技术中的Channel(通道)类的继承关系、核心接口的作用,并重点介绍FileChannel类的使用,以增加读者对NIO操作File类的熟悉度。
第3章介绍如何使用Networklnterface类获得网络接口的信息,包括IP地址、子网掩码等,还会介绍InetAddress和Interfac巳Address类的常见API。
如果进行Java开发,且基于Socket技术,那么这章可以给你需要的信息。
第4章介绍如何使用Java语言实现Socket通信。
Socket通信是基于TCP/IP和UDP实现的。
另外,将介绍ServerSocket、Socket、DatagramSocket和DatagramPacket类的全部API。
只有熟练掌握Socket技术后,在阅读相关网络框架的源代码时才不会迷茫。
也就是说,如果读者想要进行Java高性能后台处理,那么必须要学习Socket,并且它是进行细化学习的基础。
第5章介绍NIO技术中最重要的Selector(选择器)技术。
NIO技术的核心一一多路复用就是在此章体现的。
学习这章内容需要有Socket的编程基础,这就是为什么在前面用两章篇幅来介绍Java的Socket编程的原因。
同步非阻塞可以大幅度提升程序运行的效率,就在此章体会一下吧。
第6章介绍AIO。
AIO是异步IO,NIO是非阻塞IO。
AIO在NIO的基础上实现了异步执行、回调处理等高级功能,可以在不同的场景使用AIO或NIO,可以说NIO和AIO是Java高级程序员、架构师等必须要掌握的技术。
仅供非商业用途或交流学习使用v勘误和支持由于笔者的水平有限,加之编写仓促,书中难免会出现一些错误或者不准确的地方,恳请读者批评指正,期待能够得到你们的真挚反馈,在技术之路上互勉共进。
若读者想与我进行技术交流,可发电子邮件到27937792lqq.corn。
致谢感谢所在单位领导的支持与厚爱,使我在技术道路上更有信心。
感谢机械工业出版社华章公司的高婿雅,始终支持我的写作,你是我最爱的编辑。
因为你们的鼓励和帮助,所以我才会如此顺利地完成了这本书的写作。
高洪岩仅供非商业用途或交流学习使用目录。
ote.11t;前言1.3.15使用List.toArray(T)转成数组第1章缓冲区的使用.I1.1NIO概述.51.2缓冲区介绍61.3Buffer类的使用.71.3.1包装数据与获得容量71.3.2限制获取与设置101.3.3位置获取与设置121.3.4剩余空间大小获取131.3.5使用Buffermark()方法处理标记,141.3.6知识点细化测试151.3.7判断只读221.3.8直接缓冲区221.3.9还原缓冲区的状态.231.3.10对缓冲区进行反转241.3.11判断是否有底层实现的数组281.3.12判断当前位置与限制之间是否有剩余元素291.3.13重绕缓冲区301.3.14获得偏移量32类型E331.4ByteBuffer类的使用.341.4.l创建堆缓冲区与直接缓冲区351.4.2直接缓冲区与非直接缓冲区的运行效率比较.371.4.3包装wrap数据的处理391.4.4put(byteb)和get()方法的使用与position自增特性40l.4.5put(bytesrc,intoffset,intlength)和get(byteJdst,intoffset,intlength)方法的使用411.4.6put(bytesrc)和get(bytedst)方法的使用E461.4.7put(intindex,byteb)和get(intindex)方法的使用与position不变491.4.8put但yteBuffersrc)方法的使用501.4.9putType()和getType()方法的使用.511.4.l0slice()方法的使用与arrayOffSet()为非0的测试53仅供非商业用途或交流学习使用豆,1.4.11转换为CharBuffer字符缓冲区及中文的处理.541.4.12转换为其他类型的缓冲区.581.4.13设置与获得字节顺序631.4.14创建只读缓冲区.651.4.15压缩缓冲区.651.4.16比较缓冲区的内容661.4.17复制缓冲区701.4.18对缓冲区进行扩容721.5CharBuffer类的API使用.731.5.1重载append(char)/append(Char-Sequence)/append(CharSequence,sta扰,end)方法的使用731.5.2读取相对于当前位置的给定索引处的字符741.5.3川(Stringsrc)、intread(CharBuffertarget)和subSequence(intstart,intend)方法的使用.74l.5.4staticCharButferwrap(Char-Sequencecsq,intsta口,intend)方法的使用E.761.5.5获得字符缓冲区的长度7616小结77第2章通道和FileChannel类的使用.782.1通道概述.782.2通道接口的层次结构.802.2.1AsynchronousChannel接口的介绍m2.2.2AsynchronousByteChannel接口的介绍E84VII2.2.3ReadableByteChannel接口的介绍842.2.4ScatteringByteChannel接口的介绍852.2.5WritableByteChannel接口的介绍.862.2.6GatheringByteChannel接口的介绍872.2.7ByteChannel接口的介绍882.2.8SeekableByteChannel接口的介绍.892.2.9NetworkChannel接口的介绍902.2.10MulticastChannel接口的介绍912.2.11lnterruptibleChannel接口的介绍922.3AbstractlnterruptibleChannel类的介绍.932.4FileChannel类的使用952.4.l写操作与位置的使用E972.4.2读操作1002.4.3批量写操作.1062.4.4批量读操作1092.4.5部分批量写操作1172.4.6部分批量读操作1202.4.7向通道的指定position位置写人数据.1282.4.8读取通道指定位置的数据1302.4.9设置位置与获得大小.1352.4.10截断缓冲区1362.4.11将数据传输到其他可写入字节通道138仅供非商业用途或交流学习使用VIII2.4.12将字节从给定可读取字节通道传输到此通道的文件中.1412.4.13执行锁定操作1452.4.14FileLocklock()方法的使用1602.4.15获取通道文件给定区域的电Vi定.1602.4.16FileLocktryLock()方法的使用1622.4.17FileLock类的使用1622.4.18强制将所有对通道文件的更新写入包含文件的存储设备1652.4.19将通道文件区域直接映射到内存.1672.4.20打开一个文件.1742.4.21判断当前通道是否打开1812.5小结.182第3章获取网络设备信息1833.1Networklnterface类的常用方法.1843.1.1获得网络接口的基本信息1863.1.2获取MTU大小1893.1.3子接口的处理1903.1.4获得硬件地址1923.1.5获得IP地址1943.1.6InterfaceAddress类的使用2003.1.7判断是否为点对点设备2023.1.8是否支持多播2023.2N巳t飞IVO方法.2043.2.1根据索引获得Networklnterface对象2043.2.2根据网络接口名称获得Network.Interface对象2043.2.3根据IP地址获得Network.Interface对象2053.3小结.205第4章实现Socket通信2064.1基于TCP的Socket通信.2064.1.1验证ServerSocket类的accept()方法具有阻塞特性2074.1.2验证Socket中InputStream类的read()方法也具有阻塞特性u.2104.1.3客户端向服务端传递字符串.2124.1.4服务端向客户端传递字符串2134.1.5允许多次调用write()方法进行写入操作2154.1.6实现服务端与客户端多次的往来通信.2164.1.7调用S位earn的close()方法造成Socket关闭.2194.1.8使用Socket传递PNG图片文件2214.1.9TCP连接的3次“握手”过程2224.1.10标志位SYN与ACK值的自增特性.2254.1.11TCP断开连接的4次“挥手”过程2264.1.12“握手”的时机与立即传数据的特性227IX4.1.13结合多线程Thread实现4.3.5获得远程lnetAddress与远程通信228SocketAddress()地址2644.1.14服务端与客户端互传对象4.3.6套接字状态的判断-.265以及o流顺序问题,.2314.3.7开启半读与半写状态2664.2ServerSocket类的使用.2334.3.8判断半读半写状态2684.2.1接受accept与超时Timeout2334.3.9Socket选项TcpNoDelay2704.2.2构造方法的backlog参数4.3.10Socket选项SendBufferSize274含义.2354.3.llSocket选项Linger2764.2.3参数backlog的默认值2374.3.12Socket选项Timeout2874.2.4构造方法ServerSocket(intpo时,4.3.l3Socket选项OOBinline288intbacklog,InetAddressbindAddr)4.3.14Socket选项KeepAlive291的使用.2384.3.15Socket选项TrafficClass2934.2.5绑定到指定的Socket地址2404.4基于UDP的Socket通信.2944.2.6绑定到指定的Socket地址并4.4.1使用UDP实现Socket通信.295设置backlog数量2424.4.2测试发送超大数据量的包导致4.2.7获取本地SocketAdress对象数据截断的情况297以及本地端口2434.4.3DatagramPacket类中常用API4.2.8InetSocketAddress类的使用244的使用.2994.2.9关闭与获取关闭状态2474.4.4使用UDP实现单播.3004.2.10判断Socket绑定状态2484.4.5使用UDP实现广播,3014.2.11获得E地址信息2494.4.6使用UDP实现组播3034.2.12Socket选项ReuseAddress2494.5小结3054.2.13Socket选项ReceiveBuffer-Size257第5章选择器的使用3064.3Socket类的使用2595.1选择器与0多路复用.3064.3.1绑定bind与connect以及端口生5.2核心类Selector、SelectionK.ey和成的时机259Selectabl巳Channel的关系.3074.3.2连接与超时2615.3通道类AbstractinterruptibleChannel4.3.3获得远程端口与本地端口262与接口InterruptibleChannel的4.3.4获得本地InetAddress地址与介绍.310本地SocketAddress地址2635.4通道类SelectableChannel的介绍311x5.5通道类AbstractSelectableChannel5.7.19返回此通道所支持的操作332的介绍.3135.7.20执行Connect连接操作.3335.6通道类ServerSocketChannel与5.7.21判断此通道上是否正在进行接口NetworkChannel的介绍313连接操作.3365.7ServerSocketChannel类、Selector5.7.22完成套接字通道的连接和SelectionKey的使用315过程3385.7.1获得ServerSocketChannel与5.7.23类FileChannel中的longtran-ServerSocketsocket对象316sferTo(position,count,Writable-5.7.2执行绑定操作.317ByteChannel)方法的使用3405.7.3执行绑定操作与设置backlog3175.7.24方法publicstaticSocketChannel5.7.4阻塞与非阻塞以及accept()open(SocketAddressremote)与方法的使用效果.318SocketOption的执行顺序3425.7.5获得Selector对象.3205.7.25传输大文件.3445.7.6执行注册操作与获得SelectionKey5.7.26验证read和write方法是对象321非阻塞的.3465.7.7判断注册的状态3225.8Selector类的使用.3485.7.8将通道设置成非阻塞模式再5.8.1验证publicabstractintselect()注册到选择器.323方法具有阻塞性.3505.7.9使用configureB!
ocking(false)5.8.2select()方法不阻塞的原因和方法解决异常.323解决办法3515.7.10判断打开的状态3245.8.3出现重复消费的情况3535.7.11获得阻塞锁对象3255.8.4使用remove()方法解决5.7.12获得支持的SocketOption重复消费问题.355列表3255.8.5验证产生的setl和set2关联的5.7.13获得与设置SocketOption327各自对象一直是同一个3565.7.14获得SocketAddress对象3275.8.6intselector.select()方法返回值5.7.15阻塞模式的判断.328的含义3605.7.16根据Selector找到对应的5.8.7从已就绪的键集中获得通道中SelectionKey.328的数据3625.7.17获得SelectorProvider对象3295.8.8对相同的通道注册不同的相关5.7.18通道注册与选择器.330事件返回同一个SelectionKey.3635.8.9判断选择器是否为打开状态.3655.8.10获得SelectorProviderprovider对象3655.8.11返回此选择器的键集.3665.8.12publicabstractintselect(longtimeout)方法的使用3675.8.13publicabstractintselectNow()方法的使用3685.8.14唤醒操作.3695.8.15测试若干细节.3705.9SelectionK.ey类的使用3805.9.1判断是否允许连接SelectableChannel对象3815.9.2判断是否已准备好进行读取3835.9.3判断是否已准备好进行写入3845.9.4返回SelectionKey关联的选择器3865.9.5在注册操作时传人attachment附件3875.9.6设置attachment附件.3895.9.7获取与设置此键的interest集合3905.9.8判断此键是否有效3925.9.9获取此键的ready操作集合3925.9.10取消操作3955.10DatagramChannel类的使用.3965.10.1使用DatagramChannel类实现UDP通信.3985.10.2连接操作.3995.10.3断开连接400XI5.10.4将通道加入组播地址4005.10.5将通道加入组播地址且接收指定客户端数据4025.11Pipe.SinkChannel和Pipe.SourceChannel类的使用.4035.12SelectorProvider类的使用4065.13小结407第6章AIO的使用.4086.1AsynchronousFileChannel类的使用4086.1.1获取此通道文件的独占锁4096.1.2获取通道文件给定区域的锁4106.1.3实现重叠锁定4126.1.4返回此通道文件当前大小与通道打开状态4136.1.5CornpletionHandler接口的使用.4日6.1.6publicvoidfailed(Throwableexc,Aattachment)方法调用时机.4146.1.7执行指定范围的锁定与传人附件及整合接口,.4156.1.8执行锁定与传人附件及整合接口CornpletionHandler4166.1.9lock
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- fdba8d1224800fa764621baef51f67c