【发布时间】:2011-07-24 07:25:50
【问题描述】:
我有一个 javaagent 使用 agentmain 连接到远程进程,它通过套接字将序列化的 java 对象发送到客户端应用程序。
流的格式似乎存在错误,我不确定这是我的 writeExternal 实现中的错误还是与 java 版本有关。我正在尝试不同的 java 1.6 32 / 64 位组合。
基本上,对象流抛出了一个未找到的类异常,但打印的包名称类似于 org.mycode.b.e.b.,b.e.b 部分与我拥有的任何包无关,我已经搜索过并且有我的代码或库中没有包含该字符串的内容... b.e.b.
所以我怀疑这是由编码格式差异或 32/64 位字长问题引起的编码问题,但我在这些方面经验不足。
我非常习惯于打开调试器来跟踪代码问题,但在诊断这种性质的问题方面经验较少,包括序列化和字节格式,所以我想看看推荐的调试方法是什么?
我拥有使用如下代码的客户端的控制/编译/源代码:
objectInput = new ObjectInput(inputStream);
Object object = objectInput.readObject();
当前为 org.mycode.b.e.b 抛出未找到的类。
我正在考虑重写它以将序列化的流存储到文件中并查看(不确定文件在读取时实际上是什么格式),这是正确的角度吗?
【问题讨论】:
-
你可能在使用混淆技术吗?
-
嗯,是的,我是,这很有趣,因为我从 intellij 运行客户端,它没有被混淆,但代理 jar 代码将是......完全有意义,我忘记了这种断开连接。如果是这种情况,我现在会确认。
-
@ALexR - 感谢您的提示。你是对的。我想知道我是否应该编辑/删除我的问题,以免误导人们,我的意思是你的答案和根本问题只与 ClassNotFoundExceptions 相关,并且知道什么是,不在你的类路径上,以及混淆器是否在工作。
标签: java debugging serialization 32bit-64bit deserialization