从不同的应用程序中读取Java ObjectInputStream
我将一个ArrayList<MyClass>
作为对象保存为ObjectOutputStream
。现在,我如何在ObjectInputStream
的另一个应用程序项目上读取该对象?我试过了,它会抛出一个ClassNotFoundException
。我已将项目1中的MyClass
复制到项目2中。我还必须执行其他任何操作吗?从不同的应用程序中读取Java ObjectInputStream
您不应该复制一个类,并期望它看起来相同 - Java编译器/ JVM注意到这些更改。使用完全相同的类文件 !!!
有好几个版本可以这样做:
- 交付PROJECT1与Project2中并设置CLASSPATH
- 复制在类文件相同的封装到Project2的
- 连接广口瓶中,Project2的含
MyClass
而你永远不应该忘记的东西:每个Serializable
应该有一个serialVersionUID
Eclipse自动发出警告 - 点击它并生成它。如果您没有Eclipse,请使用JDK中的serialver
。
但是不要忘记:如果您的课程改变了,以至于旧版本不能被新版本解释,请更改serialversionUID
。
*每个Serializable应该有一个serialVersionUID *:否。这是不正确的。如果您不知道它是什么,如何使用它,以及如何对您的类进行更改并向后兼容序列化版本,那么添加serialVersionUID只会增加代码的噪音。 – 2014-09-06 21:01:13
@JBNizet这是不正确的。我在与Linux和Windows上运行的'Object [Input | Stream]流拥有相同的JAR文件,并且在另一个操作系统上创建的文件没有运行异常,那些'serialVersionUID'没有运行' t匹配 – msrd0 2014-09-06 21:03:11
然后你可能有2个版本的同一个类,但是由两个不同的编译器编译。请参阅http://docs.oracle.com/javase/7/docs/platform/serialization/spec/class.html#4100 – 2014-09-06 21:09:33
为什么你用'FileInputStream'而不是'ObjectInputStream'来读?你是否检查过两个类都具有相同的'serialVersionUID'?如果这没有帮助,你能否请过去的例外和最近的代码? – msrd0 2014-09-06 20:50:04
你是什么意思的“复制”。你不应该复制它。你应该使用完全相同的类。 – 2014-09-06 20:50:32
我的坏我在另一个项目中使用ObjectInputStream ..我将编辑问题 – 2014-09-06 20:51:04