我正在使用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);
并在客户端阅读:
byte[] readByte = Base64.decode(chartInString);
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(readByte));
Chart chart = (Chart) ois.readObject();
当服务器和客户端具有相同的JVM版本时,它可以正常工作。我意识到GenericChart实现了Serialization(这个类在提供的jar中)。
我怎么能克服这个问题,因为我无法修改他们提供的jar类?
非常感谢任何回复。 谢谢!
答案 0 :(得分:1)
我无法读取Chart对象,它抛出此异常:java.io.InvalidClassException:javax.swing.JComponent;本地类不兼容:stream classdesc serialVersionUID = -1030230214076481435,本地类serialVersionUID = 5670834184508236790
实际上,这与JVM版本无关,而与运行时库无关。类javax.swing.JComponent
的更改方式使串行表示不兼容。
我担心,除了使用相同版本之外,你无能为力。
答案 1 :(得分:1)
在现有的每个Swing类的Javadoc类中都有一个警告,序列化版本将与其他JDK版本不兼容。所以,不要序列化它们。序列化模型。