Android开发进阶之NIO非阻塞包(五)
有关AndroidNIO的注意点和重点今天Android123着重分析下上次Android开发进阶之NIO非阻塞包(四)一文中提到的不足地方改进。由于目前国内很多人资料书籍编写人员没有通过NIO实现服务器的经验,导致了很多例子中存在严重的错误,由于大多数例子为Echo这样的单次交互以及数据量较小所以反映不出问题的所在。
1.读和写应该分开,NIO使用的是异步的方法但不等于说不会阻塞,在上面的例子中我们可以看到判断key.isReadable()时,对于这个SelectionKey关联的SocketChannel尽量不要使用写入数据量过多时ByteBuffer使用hasRemaining这样的方法,NIO每次读写不一定全部要把数据读完在一次Selector时。
2.对于上面的解决方法我们可以继续关注感兴趣的事件,比如说使用interestOps方法,而很多资料中均使用了错误的继续用Selector的register方法继续注册事件,这样没有发生错误的原因是每次注册时会替换上次的这个key注册的事件,比较侥幸,从效率上讲还会判断这个key上次注册的是什么事件,并不是一种正统的方法。
3.我们可以继续判断写入事件,比如key.isWritable,在写入时来处理发送数据。这样可以应对很多低速网络时产生的异常。
有关的细节还有很多,下一次Android开发网总结出常见的问题,并给大家一个较科学完善的框架,减少不必要的麻烦产生。
相关推荐
arctan0 2020-10-14
爱传文档 2020-05-08
xuMelon 2020-04-23
liuyong00 2020-01-16
唐宋源码清 2019-12-23
xuMelon 2019-12-21
洪宇 2019-12-13
fengshantao 2019-12-02
追寻水中桥 2019-12-01
晨风 2019-10-23
帅性而为号 2019-08-30
XHuiLin 2018-10-25
woyanyouxin 2016-10-05
88447114 2016-09-19
strburnchang 2016-01-05
chenhualeguan 2016-01-05
Mical0 2013-03-24
gary00 2013-03-09