java.nio的一个问题

gaoll 2005-04-22 10:39:03
sc为SocketChannel
SelectionKey sk = sc.register(selector, 0);
sk.interestOps(SelectionKey.OP_READ);

SelectionKey another = sc.register(selector,SelectionKey.OP_READ);
有什么不同吗?
我想知道这两种写法的不同之处,谢谢
...全文
143 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞行的兔子 2005-04-23
  • 打赏
  • 举报
回复
AbstractInterruptibleChannel<--SelectableChannel<--AbstractSelectableChannel<--SocketChannel

以上是几个类的继承关系!
其中register(Selector sel, int ops, Object att),register(Selector sel, int ops)两个方法都在SelectableChannel中定义!只不过(Selector sel, int ops, Object att)在SelectableChanel中是一个抽象方法,而register(Selector sel, int ops)是一个具体方法它的方法,该方法实际上就是register(Selector sel, int ops,null),两者效率上看不出差别!
你可以看看这几个类的源代码,可以看到生成SelectionKey的register方法在注册生成Selection key时没有用到Object att,只是在判断生成的Selection Key是否为空时采用到了Object att!也就是说两种参数register方法注册生成SelecttionKey的效率差不多的!
至于后面的那种用法我也不是很清楚,如果你想仔细看看两者究竟谁比较好,你可以研究一下它们的源代码!
hawaii_wx 2005-04-23
  • 打赏
  • 举报
回复
跟着学习ing
呵呵
OnlyFor_love 2005-04-23
  • 打赏
  • 举报
回复
顶一下!
gaoll 2005-04-23
  • 打赏
  • 举报
回复
sk.interestOps(SelectionKey.OP_READ);
这句如果在程序里多次出现会不会影响效率.例如在每次接收完数据后都注册
sk.interestOps(SelectionKey.OP_READ);对程序有没有影响.
如果只在连接成功时写上SelectionKey another = sc.register(selector,SelectionKey.OP_READ);
以后就不在注册了,是否可以.
我的意思就是只注册一次.
我的想法可以吗?因为我看到有个例子的程序就是每次接收或者发送完都要用interestOps方法去注册,为什么不在最初就把发送和接收都注册上,以后就不再注册了.这样不是更好吗?
谢谢~
relup 2005-04-23
  • 打赏
  • 举报
回复
SelectionKey another = sc.register(selector,SelectionKey.OP_READ);
比较保险,因为我用NIO这个类写的非阻断的通讯,用这个试用成功,
但是你上面另外的那个没有测试过,因为觉得没有必要

建议你使用这个
SaKura2003 2005-04-23
  • 打赏
  • 举报
回复
up
gaoll 2005-04-23
  • 打赏
  • 举报
回复
这样只在连接成功时注册一次SelectionKey another = sc.register(selector,SelectionKey.OP_READ);
与每次接收和发送都注册
sk.interestOps(SelectionKey.OP_READ);
到底有没有不同?如果没有不同是不是只要在连接成功时就把SelectionKey.OP_READ与WRITE都注册上(只注册一次),以后无论什么情况都不用interestOps再去注册,是否可以?
飞行的兔子 2005-04-22
  • 打赏
  • 举报
回复
第一个写法只是开始调用时将sc的interest set设置成0,最后在任何时刻调用interestOps方法,将interest set改成SelectionKey.OP_READ,
后者是在注册时,直接将interest set设置成了SelectionKey.OP_READ,这两种没多大区别,只是个人觉得第一种灵活性更大!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧