JAVA NIO之简介

     NIO(New IO)是从Java1.4开始引入的,是可以替代Java IO API 的API。与阻塞式IO(传统IO)不同,他提出了非阻塞信道和事件驱动的IO编程模式。现在常见的技术框架,很多都采用了NIO技术,例如:Tomcat、Netty、Jetty等。所以,学习和掌握NIO技术已经是程序员们必备的技能。

     Java.nio包中包含了很多类和组件,提供了很多高级的特性。其中核心应属:Channels、Buffer、Selector这三部分。Channel和Buffer有好几种类型,channel的主要实现包括有:FileChannel、DatagramChannel、SocketChannel与ServerSocketChannel,涵盖了TCP、UDP的网络IO以及文件IO。关于Buffer的实现基本是java基本类型的缓冲实现,即:ByteBuffer、CharBuffer、DoubleBuffer、IntBuffer、FloatBuffer、ShortBuffer、LongBuffer。其中,还有个MappedByteBuffer,用于表示内存映射文件,大大提高了文件的读写效率。Selector允许单线程处理多个Channel通道,如果你的应用打开了多个连接(通道),但每个连接的流量都很低,使用Selector就会很方便,例如在一个聊天服务器中。下图是一个单线程使用一个Selector处理三个channel的示图:



要使用Selector,必须向Selector中注册Channel,然后调用他的select()方法。这个方法会一直阻塞到某个注册的通道有事件就绪,一旦这个方法返回,线程就可以处理这些事件,事件的例子有如新连接进来,数据接收等。

       NIO与传统IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。JAVA IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方。此外,它不能前后移动流中的数据。如果需要前后移动从流中读区的数据,需要先将它缓存到一个缓冲区。NIO的缓冲导向方法略有不同。数据读取到它稍后处理的缓冲区,需要时可在缓冲区中前后移动。这一特性增加了处理过程中的灵活性。但是,还需要检查是否该缓冲区中包含所有您需要处理的数据。而且,需确保当更多的数据读入缓冲区时,不要覆盖缓冲区里尚未处理的数据。

       IO的各种流是阻塞的。这意味着,当一个线程调用read()或write()时,该线程被阻塞,直到有一些数据被读取,或数据完全写入。该线程在此期间不能再干任何事情了。NIO的非阻塞模式,使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,就什么都不会获取。而不是保持线程阻塞,所以直至数据变的可以读取之前,该线程可以做其他的事情。非阻塞写也是如此。一个线程请求写入一些数据到某通道,但不需要等待他完全写入,这个线程可以同时去做别的事情。线程通常将非阻塞IO的空闲时间用于在其他通道上执行IO操作,所以一个单独的线程现在可以管理多个输入和输出的通道。

       总之,NIO的读写都是操作缓冲区(Buffer)的,然后通过通道(channel )进行数据的交互。这篇文章先大概总结下NIO的特性及基本概念,后面详细贴出其具体的实现机制与实例。NIO中除了这三个核心部分外,还有Pipe、FileLock、Scatter(分散)/Gatter(聚集)、transferFrom/transferTo等,后面博文再一一详细介绍。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值