我可以查看Java序列化对象以进行调试吗?

我可以查看Java序列化对象以进行调试吗?,java,serialization,Java,Serialization,我遇到了一个问题,其中一个HashMap成员在序列化后变为null。这变成了一件令人讨厌的调试工作。在这个过程中,我注意到我真的很想拥有序列化文件的某种调试视图。因为最终,序列化文件结构必须如下所示: package.MyClass propName = package2.MyClass2 /**nested class data here**/; propName2 = java.lang.Integer 666; 简单地说,人类读取数据不需要这些类。有没有办法在不将数据转换

我遇到了一个问题,其中一个
HashMap
成员在序列化后变为null。这变成了一件令人讨厌的调试工作。在这个过程中,我注意到我真的很想拥有序列化文件的某种调试视图。因为最终,序列化文件结构必须如下所示:

package.MyClass
    propName = package2.MyClass2 /**nested class data here**/;
    propName2 = java.lang.Integer 666;

简单地说,人类读取数据不需要这些类。有没有办法在不将数据转换为Java实例的情况下对数据进行半序列化,这样我就可以将内容输出到控制台中?

是的,您可以。使用十六进制编辑器。这是一个相当多的手工工作,所以你最好听气垫船和EJP。但是如果你像我一样,你就忍不住至少看一次封面下的东西。

@hovercraftfullofels对象有错误,或者缺少一个类。请简化程序并进行调试。如果仍然没有解决方案,则进一步简化并调试,迭代直到获得解决方案。经典XY问题。解决原始问题,而不是尝试调试原始问题时遇到的问题。我建议您可能需要看看,或者它的
writeUnshared()
方法。@EJP我已经解决了它。但这是我经常想做的事情。这对其他java应用程序的逆向工程也会有很大帮助。@ejp另一个很好的例子说明了您的错误:现在,我的程序生成了无法取消序列化的序列化文件。如果我得到了这个问题的好答案(问的原因不同),我也可以调试这个问题。使用十六进制编辑器会告诉你什么?从中可以得到什么有用的信息?当然,我用十六进制编辑打开了文件,但我什么也看不懂。我希望有一种方法可以使用Java库解析二进制文件,而无需加载类,也无需从序列化数据构建Java对象。@TomášZato显然,您需要读取与,因为任何对象的内容都可以依赖于类的实现。