gpt4 book ai didi

java - 通过 ObjectStream 序列化问题发送/接收

转载 作者:行者123 更新时间:2023-12-02 07:45:43 26 4
gpt4 key购买 nike

这就是我的问题。

我有一个客户端和一个服务器java程序。每一方都与另一方建立并管理一个 ObjectInputStream/ObjectOutputStream。

我希望能够发送对象(假设发送的所有对象都将扩展我创建的 Packet 类)。问题是,即使客户端和服务器可能具有完全相同的数据包类代码,我也会收到错误:

java.lang.ClassNotFoundException: shared.Packet0Connect
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Unknown Source)
at java.io.ObjectInputStream.resolveClass(Unknown Source)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at com.mooman219.gmail.server.ReceivePacketThread.run(ReceivePacketThread.java:19)

看来java认为服务器上的Packet类与客户端上的不同类。

有没有办法解决这个问题(除了在客户端和服务器上使用相同的包名称之外)?

最佳答案

数据传输对象类必须是同一个类——它们必须具有相同的完全限定类名(即相同的包名和相同的类名),而不仅仅是相同的内容。

序列化过程发出的字节流包括对象的完全限定类名(以及父类(super class)的 FQCN)。然后,它还包括非 transient 、非静态字段的序列化版本(除非您使用 Hook 方法之一自定义了序列化过程)。

这是一个example of the byte stream 。请注意,在示例中,该类位于默认(空)包中,这使得我们正在讨论的内容的说明不太清楚。

关于java - 通过 ObjectStream 序列化问题发送/接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10889793/

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