MessageToByteEncoder
在 Netty 中,如果你有两个 HexMsgEncoder 类,并且它们都扩展了 MessageToByteEncoder 但针对不同类型的消息(一个处理 HexOriginData,另一个处理 SmartMsg),那么当你调用 ch.writeAndFlush((SmartMsg) data); 时,只有处理 SmartMsg 类型的 HexMsgEncoder 会被调用。
Netty 的 pipeline 会根据消息的类型来选择相应的 encoder。当你写入一个 SmartMsg 类型的对象时,Netty 会查找 pipeline 中能够处理该类型消息的 encoder。在你的情况下,只有扩展了 MessageToByteEncoder 的 HexMsgEncoder 会被选中并用于编码消息。
如果你有两个不同的 encoder 类并且它们都有相同的名称(在你的代码示例中,两个类都叫 HexMsgEncoder,这是不允许的,因为 Java 不允许类名重复),那么这实际上是一个编译错误。你需要确保每个类都有唯一的名称。
假设你有两个不同的 encoder 类,一个叫 HexOriginDataEncoder,另一个叫 SmartMsgEncoder,并且它们都正确地扩展了 MessageToByteEncoder 并分别处理了 HexOriginData 和 SmartMsg 类型的消息。在这种情况下,当你调用 ch.writeAndFlush((SmartMsg) data); 时,只有 SmartMsgEncoder 会被调用来处理消息。