Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.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
不同JVM版本的java序列化_Java_Object_Serialization - Fatal编程技术网

不同JVM版本的java序列化

不同JVM版本的java序列化,java,object,serialization,Java,Object,Serialization,我正在使用objectPlanet的第三方工具easyChart生成图形图表。它们提供了一个名为Chart.jar和ChartServer.jar的jar库 我在服务器端写了一个easyChart对象: Chart chart = new BarChart(); ... <create chart data here> ... ByteArrayOutputStream bStream = new ByteArrayOutputStream(); ObjectOutputStream

我正在使用objectPlanet的第三方工具easyChart生成图形图表。它们提供了一个名为Chart.jar和ChartServer.jar的jar库

我在服务器端写了一个easyChart对象:

Chart chart = new BarChart();
... <create chart data here> ...
ByteArrayOutputStream bStream = new ByteArrayOutputStream();
ObjectOutputStream oStream = new ObjectOutputStream( bStream );
oStream.writeObject (chart);
byte[] byteVal = bStream.toByteArray();
String chartInString = Base64.encode(byteVal);
当服务器和客户端具有相同的JVM版本时,它可以正常工作。我意识到GenericChart实现了序列化(这个类在提供的jar中)

既然我不能修改他们提供的jar类,我如何克服这个问题

非常感谢您的回复。 谢谢大家!

我无法读取图表对象,它抛出以下异常:java.io.InvalidClassException:javax.swing.JComponent;本地类不兼容:流classdesc serialVersionUID=-1030230214076481435,本地类serialVersionUID=5670834184508236790

实际上,这与JVM版本无关,而是与运行时库有关。类
javax.swing.JComponent
的更改方式使串行表示不兼容


我担心,除了使用相同的版本之外,您对此无能为力。

现有的每个Swing类的Javadoc类中都有一个警告,即序列化版本将与其他JDK版本不兼容。所以,不要序列化它们。序列化模型。

您遇到了哪些问题?假设:服务器在编写图表对象时使用Java 6 update 27。我使用2台客户机:第一台使用Java 6 update 27,我可以读取图表对象,第二台使用Java 7,我无法读取图表对象,它引发此异常:Java.io.InvalidClassException:javax.swing.JComponent;本地类不兼容:stream classdesc serialVersionUID=-1030230214076481435,本地类serialVersionUID=5670834184508236790+1——另一方面,如果需要持久性在多个JVM版本之间工作,最好使用不同的机制;e、 或者序列化模型而不是Swing组件本身。我如何序列化模型?
byte[] readByte = Base64.decode(chartInString);
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(readByte));
Chart chart = (Chart) ois.readObject();