游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

javaNIO学习笔记(四)

  javaNIO学习笔记(四)JavaNIOSelector
  selector(选择器)作为JavaNIO的一个组件,它可以检查一个或多个JavaNIO通道实例,并确定哪些通道可以读取或写入。通过这种方式,一个线程可以管理多个通道,从而实现多个网络连接。因为是单线程处理多个通道的信息,因此用于处理通道数据的线程数就会减少,这样就可以节省下线程之间切换的时间成本。开启selector
  selector。open()注册selector
  channel。register()
  将监听器register到非阻塞channel,并指定监听的事件,并得到一个SelectionKey实例。
  通道必须处于非阻塞模式才能与选择器一起使用。这意味着你不能使用FileChannel的选择器,因为FileChannel的不能切换到非阻塞模式。
  监听一般有四个事件
  这四个事件由四个SelectionKey常量表示:
  SelectionKey。OPCONNECT
  SelectionKey。OPACCEPT:就是就绪
  SelectionKey。OPREAD
  SelectionKey。OPWRITE
  如果想监听多个事件可以按照如下方式写:
  intinterestSetSelectionKey。OPREADSelectionKey。OPWRITE;
  SelectionKey
  一些常见方法返回SelectionKey的attachment,attachment可以在注册channel的时候指定。SelectionKey。attachment(object);SelectionKeykeychannel。register(selector,SelectionKey。OPREAD,theObject);返回该SelectionKey对应的channel。SelectionKey。channel();返回该SelectionKey对应的Selector。SelectionKey。selector();返回代表需要Selector监控的IO操作的bitmaskSelectionKey。interestOps();返回一个bitmask,代表在相应channel上可以进行的IO操作。SelectionKey。readyOps();创建ready集合的方法intreadySetselectionKey。readyOps();检查这些操作是否就绪的方法SelectionKey。isAcceptable();是否可读,是返回truebooleanisWritable():是否可写,是返回truebooleanisConnectable():是否可连接,是返回truebooleanisAcceptable():是否可接收,是返回true判断Selector是否对Channel的某种事件感兴趣intinterestSetselectionKey。interestOps();booleanisInterestedInAccept(interestSetSelectionKey。OPACCEPT)SelectionKey。OPACCEPT;booleanisInterestedInConnectinterestSetSelectionKey。OPCONNECT;booleanisInterestedInReadinterestSetSelectionKey。OPREAD;booleanisInterestedInWriteinterestSetSelectionKey。OPWRITE;Channelchannelkey。channel();Selectorselectorkey。selector();
  select()方法:返回值表示有多少通道已经就绪,一旦调用select()方法,并且返回值不为0时,则可以通过调用Selector的selectedKeys()方法来访问已选择键集合。intselect():阻塞到至少有一个通道在你注册的事件上就绪了。intselect(longtimeout):和select()一样,但最长阻塞时间为timeout毫秒。intselectNow():非阻塞,只要有通道就绪就立刻返回。
  选择器执行选择的过程,系统底层会依次询问每个通道是否已经就绪,这个过程可能会造成调用线程进入阻塞状态,那么我们有以下三种方式可以唤醒在select()方法中阻塞的线程。wakeup()方法:通过调用Selector对象的wakeup()方法让处在阻塞状态的select()方法立刻返回该方法使得选择器上的第一个还没有返回的选择操作立即返回。如果当前没有进行中的选择操作,那么下一次对select()方法的一次调用将立即返回。close()方法:通过close()方法关闭Selector该方法使得任何一个在选择操作中阻塞的线程都被唤醒(类似wakeup()),同时使得注册到该Selector的所有Channel被注销,所有的键将被取消,但是Channel本身并不会关闭。
  下面的代码是参考文档中对应给出的。packagejniolearn。selector;importjava。io。IOException;importjava。net。InetSocketAddress;importjava。nio。channels。SelectionKey;importjava。nio。channels。Selector;importjava。nio。channels。ServerSocketChannel;importjava。util。Iterator;importjava。util。Set;Author:jimmyDate:202061522:15Description:publicclassSelectorPrc{publicstaticvoidmain(String〔〕args)throwsIOException{ServerSocketChannelsscServerSocketChannel。open();ssc。socket()。bind(newInetSocketAddress(localhost,8080));设置为非则色ssc。configureBlocking(false);开启一个选择器SelectorselectorSelector。open();注册选择器和监听的事件ssc。register(selector,SelectionKey。OPACCEPT);while(true){intreadyNumselector。select();if(readyNum0){continue;}SetSelectionKeyselectedKeysselector。selectedKeys();IteratorSelectionKeyitselectedKeys。iterator();while(it。hasNext()){SelectionKeykeyit。next();if(key。isAcceptable()){接受连接}elseif(key。isReadable()){通道可读}elseif(key。isWritable()){通道可写}keyIterator。remove()调用。选择器不会从所选键集本身移除SelectionKey实例。处理完通道时,必须这样做。下次通道变为ready时,选择器将再次将其添加到选中的键集。it。remove();}}}}JavaNIOPipe
  pipe的意思是管道,那么前面几篇学习中我说channel也可以理解为管道是错误的,这里更正下,channel应该理解为通道,防止概念混乱。
  管道单项连接2给线程的。管道具有源通道和接收通道。将数据写入接收通道。然后可以从源通道读取该数据。packagejniolearn。channel;importjava。io。IOException;importjava。nio。ByteBuffer;importjava。nio。channels。Pipe;Author:jimmyDate:202061523:44Description:publicclassNioPipe{publicstaticvoidmain(String〔〕args)throwsIOException{开启pipePipepipePipe。open();接受通道开启Pipe。SinkChannelsinkChannelpipe。sink();准备数据StringnewDatajimmypipe;ByteBufferbufByteBuffer。allocate(48);buf。clear();buf。put(newData。getBytes());buf。flip();写入数据while(buf。hasRemaining()){sinkChannel。write(buf);}接受数据ByteBufferbufferByteBuffer。allocate(48);Pipe。SourceChannelsourceChannelpipe。source();intlensourceChannel。read(buffer);buffer。flip();System。out。println(newString(buffer。array(),0,len));4。关闭管道sinkChannel。close();sourceChannel。close();}}JavaNIOPath
  JDK7新增Path接口,Paths工具类,Files工具类。这些接口和工具类对NIO中的功能进行了高度封装,大大简化了文件系统的IO编程。
  分别位于java。nio。file、java。nio。channels包下Path
  Path接口表示的是一个与平台无关的路径(文件和目录都用Path表示)。
  Path类中包含了常用的操作路径的方法,getRoot()Path对象的跟路径toAbsolutePath()Path对象的绝对路径getNameCount()Path对象里包含的路径数量PathpathPaths。get(c:datamyfile。txt);
  在Unix系统(Linux,MacOS,FreeBSD等)上,上面的绝对路径看起来像这样:PathPaths。get(homejakobjenkovmyfile。txt);
  Path接口的normalize()方法可以规范化路径StringoriginalPathd:dataprojectsaproject。。anotherproject;Pathpath1Paths。get(originalPath);System。out。println(path1path1);Pathpath2path1。normalize();System。out。println(path2path2);规范化路径不包含aproject。。部分,因为这是多余的。被删除的部分没有添加到最终的绝对路径。path1d:dataprojectsaproject。。anotherprojectpath2d:dataprojectsanotherprojectp1。toFile();Paths工具类
  Paths工具类包含了两个返回Path对象的静态方法。staticPathget(URIuri)直接通过路径返回Path对象staticPathget(Stringfirst,Stringmore)通过给出的String字符串组装成一个Path对象packagejniolearn;importjava。nio。file。Path;importjava。nio。file。Paths;Author:jimmyDate:202061600:10Description:publicclassPathPrc{publicstaticvoidmain(String〔〕args){在传统java。io中,文件和目录都被抽象成File对象,即FilefilenewFile(。);NIO。2中则引入接口Path代表与平台无关的路径,文件和目录都用Path对象表示通过路径工具类Paths返回一个路径对象PathPathpathPaths。get(。);System。out。println(path里包含的路径数量:path。getNameCount());System。out。println(path的根路径:path。getRoot());path的绝对路径对比传统java。io,取绝对路径file。getAbsoluteFile()PathabsolutePathpath。toAbsolutePath();System。out。println(path的绝对路径:);System。out。println(absolutePath);System。out。println(absolutePath的根路径:absolutePath。getRoot());System。out。println(absolutePath里包含的路径数量:absolutePath。getNameCount());System。out。println(absolutePath。getName(3));以多个String来构建path》java。lang。IllegalArgumentException,路径不存在会报错Pathpath2Paths。get(D:,myProject,ThreadNotes);System。out。println(path2);}}
  下一篇学习file和异步Channel。

漫威系列电影顺序漫威电影大全及简介漫威系列电影顺序:漫威电影大全及简介漫威电影顺序是怎样的,下面为大家解答这个问题,漫威电影大全如下,来看看:《钢铁侠1》《钢铁侠》是2008年上映的美国超级英……漫威电影官方观看顺序按照这个顺序没错了漫威电影观影顺序如何看?你可以直接按照电影上映的顺序来依次观看,然而这并非最佳方式。下面介绍下最佳的观影顺序及外媒给出的观影顺序。漫威系列正确(最佳)的观影顺序如下:……人民财评对词典类APP的差错不能掉以轻心本该指导学生的学习工具、词典工具,却误人子弟,实在令人遗憾。究其原因,恐怕还是在于相关商业机构在组织此类APP研发时不够专业严谨。推出APP的不是慈善机构,其目的是通过吸引扩大……漫威实力排名官方前15名漫威电影是很多人喜欢的系列电影,不过大家都在讨论漫威英雄的实力排名如何,那么漫威英雄实力排名官方版本是什么样的?漫威英雄谁最厉害,下面一起了解下。1漫威实力排名官方1、天……索尼与漫威复合已达成协议蜘蛛侠将留在漫威令人振奋据悉,9月28日,索尼与漫威复合登上热搜,9月27日,据多家外媒报道,索尼影业与漫威影业迪士尼复合!没想到如今索尼与漫威复合,将联合拍摄《蜘蛛侠》第三部,所以,蜘蛛侠将留在漫威……谢公子的酒播出时间,谢公子的酒剧情轻喜剧《谢公子的酒》选择在2022年3月3日播出,所带来女主身为现代穿越过来的人,而遇见跟自己暗恋男生谢退思长得一样的酒肆老板谢逊产生众多喜剧的情节,使得观众能治愈和成长的情况……买定离手我爱你具体播出时间,买定离手我爱你主要剧情职场剧《买定离手我爱你》安排在2022年6月2日播出,所进行围绕着时尚买手行业展开叙述,来给带来丁亦可初期是一个时尚值为负的沪漂女生,之后她一步步进阶学习下变成超级买手的事情。……盗墓笔记秦岭神树为什么有两个老痒,盗墓笔记秦岭神树小哥是谁盗墓笔记说起来就会有很多人熟悉,可在盗墓笔记里面的剧情的秦岭神树之中真的有两个老痒,很多的网友就想了解一下,其中该有着一定的故事发生才能给写下去,但有的网友就不清楚盗墓笔记剧情……零失败!跨网段的共享打印机怎么连接win10系统下不同网段打印机共享第一步,首先修改需要你自己电脑上的Hosts文件(不是已连接打印机的电脑)。Hosts文件在C:WindowsSystem32dr……新世界金海是好是坏新世界金海的结局是什么近日,电视剧《新世界》正在热播当中,其中这部剧刚一播出就直接把剧情推向了高潮,其中金海就是其中的角色,那么,在电视剧《新世界》当中,金海到底是好是坏呢?《新世界》金海的结局是什……豆瓣评分高的电视剧十部9分以上的电视剧(精选)现在的很多影视剧都是小鲜肉出演的,很多人看小鲜肉都出现了脸盲,其实以前的很多影视剧非常经典,让人有很多回忆。今天我们了解豆瓣9分以上的电视剧前十。豆瓣评分高的电视剧豆瓣高……任正非传提起当代中国的企业家,首先跃入大众视野的便是王健林、马云、李嘉诚、雷军等一批常活跃于新闻媒体上的非凡人物,他们用自己的勤劳和智慧创造着令人惊叹的奇迹。与这群常曝光于大众视野中的……
10月黄牛狂欢季,苹果12加价一千已抢疯,mate40更疯狂iPhone12已经发布,整体来看,iPhone12系列虽然相对于iPhone11系列升级比较明显,由于取消了随附耳机以及充电器,但价格并没有提升多少。不过这并不代表今年……为什么物联网安全在今天如此重要?数字连接设备和应用正在渗入我们生活的方方面面,包括我们的家、办公室、汽车甚至我们的身体。所有的物体都在变得智能,能够利用连接到互联网的好处。物联网时代正在以前所未有的速度蓬勃发……建筑行业5个令人印象深刻的物联网应用物联网(IoT)正在开始改变建筑行业。如果实施得当,将物联网技术引入工地可以显着提高效率、生产力和工人安全。了解新技术对项目各个层面的影响非常重要,而不仅仅是IT部门。为……周朝阳写作的动力是什么!靠什么日更170天靠自律吗,没有几个人会对自己狠,上学时写作文,不上交会被点名,不上交爸妈会知道,自律短时间内是可以的,但是长时间坚持做一件事,谁没个特殊情况呀,总有断更的时候,有一次断更就会有……美国最大电商拿中企开刀,600多个品牌遭殃,中国商家开始反击在今年上半年,跨境电商受到了一些风波。导致国内600多个品牌被罚,上千亿的资金被冻结,在申诉这条路行不通之后,中国商家开始向美国最大的电商进行反击。是什么原因导致众多品牌被罚呢……学会这几招软装搭配技巧,让你迅速提升居家幸福感学会这几招软装搭配技巧,让你迅速提升居家幸福感!随着人们生活水平的不断提高,家居装修也做得越来越上档次。辛苦半辈子买的房子,怎么能在装修上面出岔子呢,每一种装修风格都代表……赓续传统,同舟共济,99公益日创造世界公益新样板秋天既是收获的季节,也是回馈的季节。古代人类社会的节庆活动,往往以大自然的演化规律为参照,中国的中秋节、重阳节,美国的感恩节,日本的敬老节,莫不如是。现代社会与古代社会有……一觉醒来,小米手机又降价啦!雷军又宣布好消息最近小米的好消息一个接着一个啊,几乎就是一觉醒来就有好消息的。这不,今天刚睡醒,就看到小米降价,又睡了一觉,雷军又宣布了一个好消息!小插曲!明天是8。7号,是什么日子呢,……罗克韦尔自动化携手蜂巢能源,打造绿色智能锂电产业2021年5月17日,中国蜂巢能源全球合作伙伴峰会暨遂宁锂电产业促进大会在四川遂宁举行。作为蜂巢能源科技有限公司的重要合作伙伴,罗克韦尔自动化出席本次活动,并就助力碳中和落地、……120W神仙秒冲RedmiNote11Pro动手玩预热已久的RedmiNote11系列终于在10月28日正式发布了,此次众多的卖点汇聚一身,在预热之初就带来空前的热度,首发天玑920,120W快充,三星AMOLED高刷屏都给到……新时达与上海通用电焊机协议共同开发下一代焊接机器人系统2021年8月31日,上海通用电焊机股份有限公司与上海新时达机器人有限公司签订战略合作协议,双方将发挥各自优势,共同开发下一代焊接机器人系统,提升焊接质量和效率,解决焊接领域的……HampampampM在中国持续的失败的背后,是西方审美逐步HM今年在中国的大新闻背后,是该瑞典品牌多年来在中国市场的持续失败。即使在HM激怒中国消费者之前,这家瑞典服装零售商在中国的市场占有率也仅剩下可怜的0。4。何况其这些年来……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网