范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

javaNio初级学习

  javaNio 学习笔记(一)
  学习参考文档:
  http://tutorials.jenkov.com/java-nio/index.html 什么是javaNio
  java Nio是java new IO。是java1.4新增的API。它提供了另一种不同于标准IO的实现方式来实现IO 知其然知其所以然
  为什么要使用java Nio?
  弄懂了为什么要使用 Java NIO  也就是知道我们为啥要学NIO了。
  首先NIO出现就是提供了替代标准IO的一种IO实现方式。那么为什么要替换标准IO呢?
  我们来看下下面的例子: // server public class Bio {     public static void main(String[] args) {         try {             ServerSocket server = new ServerSocket(2999);             System.out.println("server 监听2999端口等待客户端连接" + Instant.now().atOffset(ZoneOffset.ofHours(8)).toInstant());             Socket socket = server.accept();             System.out.println("server 监听2999端口等待客户端接受数据" + Instant.now().atOffset(ZoneOffset.ofHours(8)).toInstant());             // 从套接字中获取输入流             InputStream inputStream = socket.getInputStream();             byte[] bytes = new byte[1024];             inputStream.read(bytes);             System.out.println("get message from client: " + new String(bytes) + Instant.now().atOffset(ZoneOffset.ofHours(8)).toInstant());              inputStream.close();             socket.close();             server.close();         } catch (IOException e) {             e.printStackTrace();         }     } }  // client public class Client {      public static void main(String[] args) {          try {             // 建立连接             System.out.println("客户端准备连接服务器 2999端口" + Instant.now().atOffset(ZoneOffset.ofHours(8)).toInstant());             Socket socket = new Socket("127.0.0.1", 2999);             System.out.println("客户端连接服务器 2999端口" + Instant.now().atOffset(ZoneOffset.ofHours(8)).toInstant());             // 向socket写入数据             OutputStream outputStream = socket.getOutputStream();             System.out.println("客户端连接服务器开始写入数据" + Instant.now().atOffset(ZoneOffset.ofHours(8)).toInstant());             socket.getOutputStream().write("hi, be happy".getBytes("UTF-8"));             System.out.println("客户端连接服务器开始写入完成" + Instant.now().atOffset(ZoneOffset.ofHours(8)).toInstant());             outputStream.close();             socket.close();         } catch (IOException e) {             System.out.println(e.getMessage());         }     } }
  先启动server,然后再启动client(为了让结果比较清晰建议打断点运行),返回结果如下 // server 返回结果: server 监听2999端口等待客户端连接2020-06-11T14:35:58.428Z server 监听2999端口等待客户端接受数据2020-06-11T14:36:16.120Z get message from client: hi, be happy  // client 返回结果     客户端准备连接服务器 2999端口2020-06-11T14:36:02.026Z 客户端连接服务器 2999端口2020-06-11T14:36:35.664Z 客户端连接服务器开始写入数据2020-06-11T14:36:40.984Z 客户端连接服务器开始写入完成2020-06-11T14:36:42.969Z
  运行断点的时候会发现,当server执行到 server.accept()  和inputStream.read()  的时候程序会阻塞,让程序等待,这样会影响执行效率。这也就是为什么会有NIO来替代IO。先自己思考解决方案
  如果是让我来解决这个问题,该如何处理呢?
  可以开线程,每一个线程来处理一个client的连接。这样即使阻塞也是只阻塞当前线程。这样即使阻塞也只是阻塞当前线程,而不会对其他线程造成影响。当然这么做就会消耗系统资源,因为线程是有限的,我们不可能无限的开启线程,若客户端一直未连接就需要做超时处理,将线程关闭。 Java NIO是如何来做的?
  这个问题可能需要等到学习完 java NIO  之后才可能回答得出来。那么下面我就开始学习Java NIO。java NIO简单导读
  参考上面文档地址 传统 IO  是面向流的,而java NIO  则是面向channels  和buffers  的。数据都是从channel  中读取到buffer  或者从channel  中写入buffer  。java NIO  是非阻塞IO,即不会产生上面的问题。线程可以让channel  (有的人叫通道)去读取buffer  中的数据,这个时候线程可以做其他事情。当数据层从channel  读取到buffer  的时候线程在继续处理这部分事情。对于写也是一样。Java NIO  还提供了一个selector  。selector  是一个对象,可以监控多个通道的事件(如:连接打开,数据到达等)。这样可以让单个线程监视多个channel  java NIO 基本概念
  java NIO主要的核心组件如下: Channels(通道、管道、频道) buffers(数据缓冲区) Selector(选择器,从导读的概念来看感觉有点像监听器)
  当然java NIO还有一些其他组件,后面我会慢慢进行学习。
  channel  和buffer  就可以理解潮汐车道俩头的地点。数据可以从频道(channel)中写入缓冲区(buffer).
  也可以从缓冲区读取到频道中。
  主要实现的管道类型 FileChannel DatagramChannel SocketChannel ServerSocketChannel
  核心的缓冲区 ByteBuffer CharBuffer DoubleBuffer FloatBuffer IntBuffer LongBuffer ShortBuffer
  选择器
  选择器的作用就是能让单个线程来处理多线程的事情。要使用选择器,需要注册频道。然后调用它的select()方法。此方法将阻塞,直到为其中一个已注册通道准备好事件为止。方法返回后,线程就可以处理这些事件。(有传入的连接,接收到的数据等等)
  这些类型后续学习中我会进行练习并尽量做详细了解

搭RTX3050的轻薄电竞神器618惊喜价仅5999元游戏笔记本轻薄化显然将成为未来的一个大趋势,作为电竞产业生力军的雷神科技早早就嗅探到了这股风潮,在多年前就推出了911Air星战系列对未来进行布局。雷神911Air星战系列已经进阶奈雪的茶通过港交所聆讯2020年经调整净利润1664万元奈雪的茶(以下简称奈雪)今天通过港交所聆讯,摩根大通招银国际华泰国际为联席保荐人。与此同时,奈雪更新了招股书,数据显示,奈雪的茶收益由2018年的人民币9。1亿元增至2019年的2近期国内足坛误判名场面盘点管裁判的职业联盟可上点心吧近期,国内足坛频现误判,在此,笔者就为大家盘点一下近期出线的误判名场面。误判名场面禁区线外判点球中乙第三轮青岛海牛对阵国青,海牛后腰孙旭在本方禁区弧外通过铲球破坏对方的进攻,皮球打线下机不寒而栗卢伟冰宣布安徽实现小米之家100县级覆盖今天,小米集团中国区总裁Redmi品牌总经理卢伟冰宣布,安徽省成为继河南江苏第三个实现小米之家100县级全覆盖的省份。卢伟冰指出,从去年到今年,我们立了2个flag,从让每个县城都六一将至,方广食品惊喜集盒带回家六一儿童节将至,各零食品牌也不断出现新动作,不是发新品就是签代言,各方势力疯狂较劲儿。但要说今年儿童节给宝宝怎么过更有意义呢?除了必要的陪伴,还需要一份更加有营养的儿童节礼物。据悉酷开入局,开启潮玩青年全新巨幕时代电视机被誉为20世纪最伟大的发明之一,它的出现让人们的生活进入到真正的居家时代。从第一台国产机问世至今,电视机经历了黑白到彩色大背头到超薄液晶如今又向着大屏化智能化方向进阶。技术上鏖战618各大厂商在激光电视领域短兵相接6月1日0点,2021年618年中购物节正式开启。很快,峰米科技就宣布首战告捷,45分钟销售额即破千万,夺得618激光电视品类前一小时销售额和销量双料冠军,勇夺四连冠。随后,国内首11代酷睿绝佳搭档华硕500系主板618特惠海洋之王是由3DClouds制作的一款开放世界航海类RPG。玩家将扮演一名海贼,以成为海贼王为目标打败强劲的对手寻找奇妙的宝藏。游戏中玩家可以根据自己的游戏风格选择战斗技能以及自定在北京X7和长安CS75PLUS纠结,答案在这随着汽车时代的发展,热门汽车车型已经从轿车转移到SUV领域了,深受各种年龄段的人喜爱,很多车企也在SUV领域大显神通,研发出多种能满足消费者需求的车型,其中两款热门车型北京X7和长NBA走入堡垒之夜华硕AMD主板618限时特惠近日,IGN油管发布了堡垒之夜联动NBA的游戏宣传片,将篮球这一独特元素带入堡垒之夜。本次联动活动中,玩家可以代表联盟30支球队中的任何一支参赛,抓取射击得分,可以获得勾手投篮表情618硬核装备华硕吹雪与重炮手主板出列618购物盛宴已火热开启,各位小伙伴们的购物车是否已装满?6月1日起,华硕主板已在京东开启限时特惠,而且可享最高24期免息,装机良机不容错过!另外下半年游戏市场即将迎来备受玩家期待
科学家开发创新的3D打印技术用光线创造玻璃微结构根据发表在科学杂志上的一项新研究,加州大学伯克利分校的研究人员开发了一种3D打印玻璃微结构的新方法。这种方法速度更快,生产的物体具有更高的光学质量设计灵活性和强度。研究人员与德国弗智慧政务大数据分析应用云平台综合解决方案(90页PPT)声明因转载众多,无法找到真正来源,如标错来源,或对于文中所使用的图片文字链接中所包含的软件资料等,如有侵权,请跟我们联系删除,谢谢。将在收到信息后第一时间进行删除。参考资料来源网络事件智能管理平台实现多源事项接入,赋能城市事件高效处理的平台北明数科事件智能管理平台简介实现多源事项统一接入高位指挥和监督,引入智能分拨引擎实现精准智能事件分派,实现各类事件跨层级跨系统跨部门跨业务的协同管理和服务实现各类事件的接报派单督导小米向AOSP提交代码禁止通过shell直接导出APK出品开源中国文局长小米工程师在向AOSP(AndroidOpenSourceProject)提交的一个commit中指出,应禁止通过shell获取已安装的APK,理由是某些APK可RedmiNote11TPro将首次推出512GB版本卢伟冰又最新公布了该机的一项重磅配置,其将配备512GB超大容量存储空间,这也是小金刚历史上首次推出512GB版本。对于一般用户来说,512GB基本可以满足所有需求,即便三年不清内华为将发布新重磅产品,世界最大电网工程投产!哪些公司能受益?市场主线早盘上证指数窄幅震荡,涨跌家数上涨少跌多,指数下探至3137点迅速拉回到前高后再次回落继续震荡蓄能状态,关键在于震荡过后出中枢的方向,如果向上走关注压力位3190点附近或之RTM正式敲定微软承认Win1122H2版本就是Build22621IT之家5月25日消息,Windows11第一个大版本更新现已敲定。MichaelReinders发现了一份微软刚发布的官方文件,硬件认证页面中提到Windows1122H2版本的K50背刺了?Note11T最高容量512GB容量丨OPPO入门级平板发布今天晚上大家期待已久的redmiNote11T系列就要和我们见面了,相关的配置规格大家应该已经比较熟悉,就简单再回顾一下。RedmiNote11TPro采用6。6英寸FHDLCD屏懒人科技傍身,威马W6能否吹响反击号角?尽管目前的新能源汽车市场还处于发展阶段,但产品竞争却过早地出现了同质化的现象,很多的汽车产品看起来就像是模块化的产物,这些汽车是很难满足当今个性化的年轻消费者的,而那些有新意的设计阿里巴巴店铺托管1688代运营哪家好?选择一家优质的1688托管公司或机构,不仅能够节省费用,而且自己能够全力提高业务或者监督生产,无论对于老板高层管理人员都是非常有好处的,能够把更多的时间放在其他工作上,毕竟人的精力LongChina50分析踩刹车补短板,小鹏汽车抵御风暴成效几何?即使经历疫情种种,你依然看多中国吗?无论如何,作为中国人,你必须寄望于这艘大船能持续航行。如果看多中国,哪些公司最可能拉动中国经济继续前进?纵观过去二十年历史,我们发现,新经济领域