黑马程序员技术交流社区
标题:
有谁明白这个类DatagramSocketImpl
[打印本页]
作者:
QQ被盗
时间:
2013-12-6 11:52
标题:
有谁明白这个类DatagramSocketImpl
急啊,不弄明白,死不瞑目啊,有谁知道这个DatagramSocketImpl中的receive()方法是被哪个实现了,怎么我找了这么久的源码,都没看到它被实现了
protected abstract void receive(DatagramPacket p) throws IOException;
复制代码
作者:
QQ被盗
时间:
2013-12-6 12:09
我算是死的瞑目了,找了这么久的源码终于找答案了,结果到了最后竟然跟我来一个native的方法
先查到这个类
abstract class AbstractPlainDatagramSocketImpl extends DatagramSocketImpl
复制代码
在看到这个类中的方法receive0
protected synchronized void receive(DatagramPacket p)
throws IOException {
receive0(p);
}
复制代码
操,有时一个抽象的方法
protected abstract void receive0(DatagramPacket p)
throws IOException;
复制代码
接着继续,查到这个类
class DualStackPlainDatagramSocketImpl extends AbstractPlainDatagramSocketImpl
复制代码
在这个类中又要查socketReceiveOrPeekData方法
protected synchronized void receive0(DatagramPacket p) throws IOException {
int nativefd = checkAndReturnNativeFD();
if (p == null)
throw new NullPointerException("packet");
if (p.getData() == null)
throw new NullPointerException("packet buffer");
socketReceiveOrPeekData(nativefd, p, timeout, connected, false /*receive*/);
}
复制代码
结果一看,竟然是一个nativ方法
private static native int socketReceiveOrPeekData(int fd, DatagramPacket packet,
int timeout, boolean connected, boolean peek) throws IOException;
复制代码
让我郁闷至死,至死都没弄明白是receive方法是怎么接收send方法发送的数据包
作者:
ysunday
时间:
2013-12-7 01:27
少年,找到就行了,关键字最好和谐下啊
作者:
吴琼cola
时间:
2013-12-7 09:42
研究源码对自己写代码有特别好的帮助,代码之路就是copy,慢慢形成自己的自主思想,写出自己风格思想的代码。如果你用IDE(如:eclipse),你可以用快捷键去追踪(Ctrl+G,ctrl+shift+I)。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2