最近,我们的项目需要重新设计。但是当我使用JAVA的接口(interface)Serialized时,我花费了很多时间。
现在有两个程序:A和B。
- A 处于离线状态,其功能是将 JSON 数据转换为 C 类。
- 然后序列化C并将其存储到redis中(现在C是一个对象)
- B 获取对象,反序列化它,并将其转换为 C
但它不起作用。在日志信息中,我发现,A和B中的C类必须具有相同的目录。也就是说,当我将C放入A中时,包目录为“com.hello.src” .a”,在 B 中,包目录为“com.world.src.b”,B 程序将抛出 ClassNotFoundException,因为 B 的 JVM 找到了目录为“com.hello.src.a”的 C!
当我将 C 放入具有相同包目录的 A 和 B 中时,它可以工作。我想知道是否有更好的方法来解决这个问题。当我反序列化时,我在B程序中指定包目录来查找类C(就像我告诉B的JVM使用包目录“com.world.src.b”查找C)
最佳答案
将类从一个包复制到另一个包是完全没有意义的,并且是导致此类问题的原因。决定您希望类 C
位于哪个包中,然后将其保留在那里,在其所在的位置使用它。
关于Java 可序列化混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21152793/