从不同应用程序读取Java ObjectInputStream

从不同应用程序读取Java ObjectInputStream,java,class,serialization,objectinputstream,Java,Class,Serialization,Objectinputstream,我将ArrayList保存为带有ObjectOutputStream的对象。现在,我如何在另一个应用程序项目中使用ObjectInputStream读取该对象?我试过了,它抛出了一个ClassNotFoundException。我已将MyClass从项目1复制到项目2。我还需要做什么吗?您不应该复制一个类,而应该期望它看起来是一样的——Java编译器/JVM会注意到这些更改。使用完全相同的类文件 有几个版本可以执行此操作: 使用Project2交付Project1并设置类路径 将相同包中的类文

我将
ArrayList
保存为带有
ObjectOutputStream
的对象。现在,我如何在另一个应用程序项目中使用
ObjectInputStream
读取该对象?我试过了,它抛出了一个
ClassNotFoundException
。我已将
MyClass
从项目1复制到项目2。我还需要做什么吗?

您不应该复制一个类,而应该期望它看起来是一样的——Java编译器/JVM会注意到这些更改。使用完全相同的类文件

有几个版本可以执行此操作:

  • 使用Project2交付Project1并设置类路径
  • 相同包中的类文件复制到Project2
  • 将Jar附加到包含
    MyClass
您永远不应该忘记的是:每个可序列化的
都应该有一个
serialVersionUID
Eclipse会自动发出警告-单击并生成它。如果没有Eclipse,请使用JDK中的
serialver


但别忘了:如果您的类发生了更改,旧版本无法被新版本解释,请更改
serialversionUID

为什么您要使用
FileInputStream
而不是
ObjectInputStream
来阅读?您是否检查过这两个类是否具有相同的
serialVersionUID
?如果这没有帮助,你能跳过整个异常和最近的代码吗?你说的“复制”是什么意思。你不应该复制它。你应该使用完全相同的类。我不好,我在另一个项目中也使用ObjectInputStream..我将通过复制来编辑问题我的意思是复制粘贴类源代码和类名..每个可序列化的对象都应该有一个SerialVersionId:不。那不是真的。如果您不知道serialVersionUID是什么、如何使用它以及如何对类进行更改并使其与序列化版本向后兼容,则添加serialVersionUID只会给您的代码增加噪音。@JBNizet这不是真的。我有一个JAR文件,其中包含一个运行在Linux和Windows上的
对象[Input | Output]流
,在一个操作系统上创建的文件没有在另一个操作系统上运行,除了那些
serialVersionUID
不匹配,当时可能有同一类的两个版本,但由两个不同的编译器编译。请看@JBNizet不,它实际上是同一个JAR文件