【发布时间】:2011-09-19 17:04:45
【问题描述】:
我在一个 Android 项目中有一个 Packet 类 (com.lab.tracking.Packet)。我需要通过 UDP 将此数据包发送到服务器,该服务器具有该数据包类 (com.server.serverTracking.Packet) 的完全副本。
android 应用程序将 Packet 转换为字节流,然后将其发送到服务器。服务器正确接收字节流,但是当它试图将其转换为Packet时,它会抛出异常:
java.lang.ClassNotFoundException: com.lab.tracking.Packet
我明白这一点。服务器正在尝试将此对象转换为 com.lab.tracking.Packet,而不是 com.server.serverTracking.Packet)。
字节流到Object的转换是:
public static Object toObject(byte[] dataReceived) {
Object obj = null;
try {
ByteArrayInputStream bis = new ByteArrayInputStream(dataReceived);
ObjectInputStream ois = new ObjectInputStream(bis);
obj = ois.readObject();
} catch (IOException ex) {
ex.printStackTrace();
} catch (ClassNotFoundException ex) {
ex.printStackTrace();
}
return obj;
}
我怎样才能避免这种情况?两个类完全相同,所以我认为问题出在完整名称(或 ID 或其他)上。
谢谢!
【问题讨论】:
-
为什么你有两个完全相同的类,但在不同的包中?没有办法只是将一个“转换”为另一个。您应该重构您的代码,以便客户端和服务器共享一个公共的 Packet 类。
标签: java android serialization object