0

现在写我有这个类,我希望能够使用序列化保存和打开:

public class Region implements Serializable
{
private final int      inputNumberOfColumnsAlongXAxis;
private final int      inputNumberOfColumnsAlongYAxis;
private double         inputDataScaleReductionOnXAxis;
private double         inputDataScaleReductionOnYAxis;

private int            numberOfColumnsAlongXAxis;
private int            numberOfColumnsAlongYAxis;
private int            cellsPerColumn;                // Z-Axis dimension
private float          inhibitionRadius;
private final float    percentMinimumOverlapScore;
private final float    minimumOverlapScore;

我以前从未做过对象序列化,所以任何帮助将不胜感激!

4

4 回答 4

2

您需要做的最简单的事情是为您的类添加一个私有静态字段,其名称为serialVersionUID. 例如:

private static final long serialVersionUID = 1L;

默认的序列化机制使用它来匹配类名和格式。

然后,您可以将对象的实例写入 anObjectOutputStream并从 an 中读取它们ObjectInputStream

Region r = . . .;
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(bos);
oos.writeObject(r);
oos.close();
ObjectInputStream ois = new ObjectInputStream(
    new ByteArrayInputStream(bos.getBytes()));
Region r2 = (Region) ois.readObject();
// voilà - a very expensive clone()!

为了更好地控制您的对象序列化,您可以实现以下方法:

private void writeObject(java.io.ObjectOutputStream out)
     throws IOException
 private void readObject(java.io.ObjectInputStream in)
     throws IOException, ClassNotFoundException;
 private void readObjectNoData() 
     throws ObjectStreamException;

然后,您可以完全控制对象的序列化。有关详细信息,请参阅Serializable.

更新:严格来说,你不需要声明serialVersionUID;如果缺少,运行时环境会自动为您计算一个。但是,文档对此有话要说(在原文中强调):

但是,强烈建议所有可序列化的类都显式声明 serialVersionUID 值,因为默认的 serialVersionUID 计算对可能因编译器实现而异的类细节高度敏感,因此可能会InvalidClassException在反序列化期间导致意外的 s。

于 2012-12-06T16:43:55.557 回答
0

您不需要在那里做任何事情,因为所有 Region 属性都是原始类型,即可序列化。将你的类标记为 Serializable 已经可以解决问题了。

更新:对不起,我错过了,您需要添加serialVersionUID.

于 2012-12-06T16:45:16.267 回答
0

互联网上有大量关于如何在 Java 中进行对象序列化的文档和示例。Serializable通过实现接口,您走在了正确的轨道上。

要实际序列化该类,请查看ObjectOutputStream

于 2012-12-06T16:46:55.520 回答
0

查看此链接以获取示例代码:http ://www.tutorialspoint.com/java/java_serialization.htm

考虑使用 jaxb 库(java 6 及更高版本的一部分),您可以序列化为 xml,为您提供依赖格式的人类可读的 java。

于 2012-12-06T16:48:27.967 回答