Java 如何通过套接字发送子类并在另一端恢复它们

Java 如何通过套接字发送子类并在另一端恢复它们,java,sockets,inheritance,serialization,Java,Sockets,Inheritance,Serialization,假设我们有以下类: class Packet implements Serializable { ... }; class OpenConnectionPacket extends Packet { ... }; class DataPacket extends Packet { ... }; class CloseConnectionPacket extends Packet { ... }; 现在,我希望能够发送这样的任意数据包: Socket s = ...; ObjectOutputS

假设我们有以下类:

class Packet implements Serializable { ... };
class OpenConnectionPacket extends Packet { ... };
class DataPacket extends Packet { ... };
class CloseConnectionPacket extends Packet { ... };
现在,我希望能够发送这样的任意数据包:

Socket s = ...;
ObjectOutputStream toServer = new ObjectOutputStream(s.getOutputStream());

Packet p = ...;

toServer.writeObject(p);
从另一端接收它:

Socket s = ...;
ObjectInputStream fromClient = new ObjectInputStream(s.getInputStream());

Packet p = (Packet) fromClient.readObject();

这可能吗?怎么用?(如果是,我想is应该重写
writeObject()
readObject()
方法,并且可能有类似
int类型的东西;
或者父类
包中的某个枚举来识别每个子类?

您不需要重写
writeObject()
readObject()

它在默认实现下工作,除非您在序列化时编写自定义逻辑(如果需要)

有关更多信息,请查看以下链接


即使p不是一个包而是一个子类,它也将与默认实现一起工作?是的,没有问题,但相反的情况并非如此。你自己试试看。