使用序列化读取和写入java对象

使用序列化读取和写入java对象,java,serialization,Java,Serialization,Write now我有一个类,我希望能够使用序列化保存和打开该类: public class Region implements Serializable { private final int inputNumberOfColumnsAlongXAxis; private final int inputNumberOfColumnsAlongYAxis; private double inputDataScaleReductionOnXAxis; priva

Write now我有一个类,我希望能够使用序列化保存和打开该类:

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;

我以前从未做过对象序列化,因此非常感谢您的帮助

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

private static final long serialVersionUID = 1L;
默认的序列化机制使用它来匹配类名和格式

然后,您可以将对象的实例写入
ObjectOutputStream
,并从
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;
然后,您可以完全控制对象的序列化。有关更多信息,请参阅上的文档

更新:严格来说,您不需要声明
serialVersionUID
;如果缺少,运行时环境将自动为您计算一个。然而,文件对此有这样的说法(原文强调):

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


您不需要在那里执行任何操作,因为所有区域属性都是基本类型,即可序列化的。将您的类标记为可序列化就可以了


更新:很抱歉我错过了,您需要添加
serialVersionUID

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


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

签出此链接以获取示例代码:

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