我正在使用名为easyChart的objectPlanet的第三方工具来生成图形图表。他们提供了一个名为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);
并在客户端重新阅读:
byte[] readByte = Base64.decode(chartInString);
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(readByte));
Chart chart = (Chart) ois.readObject();
当服务器和客户端具有相同的JVM版本时,它可以正常工作。我意识到GenericChart实现了序列化(此类在提供的jar中)。
由于无法修改其提供的jar类,如何解决此问题?
非常感谢任何答复。
谢谢!
最佳答案
我无法读取Chart对象,它引发了此异常:java.io.InvalidClassException:javax.swing.JComponent;本地类不兼容:流classdesc serialVersionUID = -1030230214076481435,本地类serialVersionUID = 5670834184508236790
实际上,这与JVM版本无关,而与运行时库有关。类javax.swing.JComponent
的更改方式使串行表示形式不兼容。
恐怕,除了使用相同版本外,您无能为力。
关于java - 使用不同JVM版本的Java序列化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14933149/