Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java可序列化组件_Java_Jakarta Ee_Serialization - Fatal编程技术网

Java可序列化组件

Java可序列化组件,java,jakarta-ee,serialization,Java,Jakarta Ee,Serialization,最近,我们的项目不得不重新设计。但是当我使用JAVA的接口Serializable时,我花了很多时间 现在,有两个程序:A和B A是离线的,它的功能是将JSON数据转换为类C 然后序列化C并将其存储在redis中(现在C是一个对象) B获取对象,反序列化它,并将其转换为C 但它不起作用。在日志信息中,我发现,A和B中的C类也必须具有相同的dir。也就是说,当我将C放入A中的包dir“com.hello.src.A”,放入B中的包dir“com.world.src.B”时,B程序将抛出ClassN

最近,我们的项目不得不重新设计。但是当我使用JAVA的接口Serializable时,我花了很多时间

现在,有两个程序:A和B

  • A是离线的,它的功能是将JSON数据转换为类C
  • 然后序列化C并将其存储在redis中(现在C是一个对象)
  • B获取对象,反序列化它,并将其转换为C
  • 但它不起作用。在日志信息中,我发现,A和B中的C类也必须具有相同的dir。也就是说,当我将C放入A中的包dir“com.hello.src.A”,放入B中的包dir“com.world.src.B”时,B程序将抛出ClassNotFoundException,因为B的JVM使用dir“com.hello.src.A”查找C


    当我使用相同的包目录将C放入A和B中时,它就工作了。我想知道是否有更好的方法来解决这个问题。当我反序列化时,我在B程序中指定package dir来查找C类(就像我告诉B的JVM使用package dir“com.world.src.B”来查找C类一样)

    将类从一个包复制到另一个包是完全没有意义的,这是导致类似问题的原因。决定你想让class
    C
    放在哪一个包里,放在那里,在它所在的地方使用。

    我不明白,你能简单介绍一下细节吗。这确实令人困惑;我不知道你在问什么。为什么不直接将JSON存储在数据库中,而不是将其存储为序列化java对象?因为性能太低了。B程序在线,但A和B不在项目中。所以,他们不共享C类。另一方面,A和B是不同的程序。所以他们有不同的包目录。当我把C放在同一个包目录中时,A或B必须创建无用的包目录。我只能重复上面所说的。你如何组织你的项目是你的事情,但保持类在他们原来的包是一项要求。观察它。您不能序列化类
    x.C
    并期望将其反序列化为
    y.C
    ,其中
    x
    y
    是两个不同的包。它不是那样工作的。它被序列化为它是什么,而不是你想要的。一个需要存在的包没有什么“无用”的。谢谢。看来安全是最重要的。我会遵守这条规则,这与安全无关。这只是语言的规则。不同包中的两个类是不同的,不管它们的名称和包含什么。没有其他的东西有意义。真棒的回答!非常感谢~