众所周知,我们使用与以下代码类似的代码来使用 UDP 套接字接收数据包:
DatagramSocket s = new DatagramSocket();
byte[] buf = new byte[1024];
DatagramPacket p = new DatagramPacket(buf, buf.length);
s.receive(p);
我想知道为什么函数 receive()
宁愿设置传递的数据包而不是返回数据包对象。
为什么这个API要这样设计?这样的设计方法有什么优点,有什么缺点?
最佳答案
当您查看代码时,您会发现“用户”定义了 buffer 数组,套接字稍后将使用该数组来实际存储数据。
因此,此 API 的用户可以完全控制将使用的内存/缓冲区。
当然,这也使得使用该界面变得“更加复杂”。但是,当您处理此类低级界面时,您很可能希望能够控制此类微妙的细节。
含义:当您进入“我自己实现数据报协议(protocol)实现”的境界时,您就会真正知道为什么要这样做。那么“更多程度”的自由就是一件好事。
或者,JB Nizet 的解释也是合理的:这个 API 基本上已经有 17 多年的历史了。这很可能是当时人们使用 C/C++ 所做的事情的简单“复制”。
从那里开始:如果有人要为此目的创建一个“新鲜”API,那么现在它很可能看起来会大不相同并且更加“抽象”。
关于java - Java套接字中的函数 'receive'是如何设计的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46973906/