gpt4 book ai didi

java - 实现 accept(SocketImpl s) 和对象复制

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:11:31 26 4
gpt4 key购买 nike

我正在根据 RAW 套接字 实现肯定确认和重传 传输协议(protocol),在这种情况下,需要 SocketImpl 的子类.在实现 accept 方法时,我需要这样的东西:

protected void accept(SocketImpl s) {
...
s.copy(socket);
}

其中 socket 是一个已经计算的 SocketImpl 对象,必须复制到一个已经初始化 SocketImpl 对象 s .i.e 我需要一个可变复制方法 s.copy(socket) 将源 socket 复制到目标 s。我知道存在 Object clone() 但它返回一个新对象,我需要的是改变 s

顺便说一句,有些人认为改变一个参数,在本例中是s,是一个错误的设计。它不是 Java 标准库中的唯一示例。 ServerSocket类的implAccept(Socket s)是另一个例子。但这就是 Sun/Oracle 工程师设计它的方式。我想知道为什么这是一个糟糕的设计

乍一看,提供一个通用的浅层 target.copy(source) 似乎有一定意义,其中 target = souce.clone() 将是相当于 target = new TheClass(); target.copy(来源);但由于它不存在(可能有充分的理由,请解释)唯一的方法是编写一个自定义的逐字段复制方法

我说的对吗?谢谢。

最佳答案

您误解了此方法的用途及其工作原理。我已经做过很多次了。提供给 implAccept()SocketImpl 用于新接受的套接字,而不是 ServerSocket。所以您不需要第二份副本。您需要做的就是将此 SocketImpl 包装在 Socket 或您自己的 Socket 派生类中。奇怪的是,甚至还为此目的提供了一个 Socket 构造函数。

关于java - 实现 accept(SocketImpl s) 和对象复制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13077529/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com