当前位置:8288分类目录 » 站长资讯 » SEO » 文章详细

java 序列化与反序列化(xml序列化与反序列化)

来源:网络转载 浏览:75133次 时间:2023-12-12

Java 序列化与反序列化:简单易懂的介绍


分类目录


在 Java 编程中,序列化和反序列化是一种常见且重要的数据处理方式。它们能够让我们将对象转换成字节流,或者将字节流转换回对象。本文将以通俗易懂的方式,向大家介绍 Java 序列化与反序列化的原理和用法。

什么是序列化?

序列化是指将对象转换成字节流的过程。当我们需要将一个对象存储到硬盘或通过网络传输时,需要将其序列化。在 Java 中,我们可以使用 Serializable 接口来实现对象的序列化。该接口是一个标记接口,没有任何方法,但是告诉编译器这个类可以被序列化。

下面是一个示例代码,展示了如何实现 Serializable 接口:

```java

import java.io.Serializable;

public class Person implements Serializable {

private String name;

private int age;

// 构造函数、getter和setter省略

@Override

public String toString() {

return "Person{name='" + name + "', age=" + age + "}";

}

}

```

在上面的例子中,我们定义了一个 Person 类,并实现了 Serializable 接口。这样,Person 对象就可以被序列化了。

如何进行序列化?

通过 Java 的 ObjectOutputStream 类,我们可以将对象序列化为字节流。下面是一个简单的示例代码,展示了如何把 Person 对象序列化,并存储到文件中:

```java

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.ObjectOutputStream;

public class SerializationExample {

public static void main(String[] args) {

Person person = new Person("Tom", 25);

try (FileOutputStream fileOut = new FileOutputStream("person.ser");

ObjectOutputStream out = new ObjectOutputStream(fileOut)) {

out.writeObject(person);

System.out.println("对象已经被序列化并保存到 person.ser 文件");

} catch (IOException e) {

e.printStackTrace();

}

}

}

```

在上面的代码中,我们创建了一个 Person 对象并将其保存到 `person.ser` 文件中。通过 `ObjectOutputStream` 的 `writeObject` 方法,我们可以将对象写入字节流中。

什么是反序列化?

反序列化是指将字节流转换为对象的过程。当我们需要从硬盘或网络中恢复一个对象时,需要进行反序列化。在 Java 中,我们可以使用 ObjectInputStream 类来实现对象的反序列化。

下面是一个简单的示例代码,展示了如何从文件中读取字节流,并将其反序列化成 Person 对象:

```java

import java.io.FileInputStream;

import java.io.IOException;

import java.io.ObjectInputStream;

public class DeserializationExample {

public static void main(String[] args) {

try (FileInputStream fileIn = new FileInputStream("person.ser");

ObjectInputStream in = new ObjectInputStream(fileIn)) {

Person person = (Person) in.readObject();

System.out.println("从 person.ser 文件中反序列化出的对象:" + person);

} catch (IOException | ClassNotFoundException e) {

e.printStackTrace();

}

}

}

```

在上述代码中,我们从 `person.ser` 文件中读取字节流,并使用 `ObjectInputStream` 的 `readObject` 方法将其反序列化为一个 Person 对象。

需要注意的是,在进行反序列化时,Java 会校验对象类的 serialVersionUID。如果类的 serialVersionUID 与字节流中的 serialVersionUID 不一致,就会抛出 `InvalidClassException` 异常。为了避免这个问题,我们可以手动指定 serialVersionUID,例如:

```java

private static final long serialVersionUID = 1L;

```

总结

通过本文的介绍,我们了解了 Java 序列化与反序列化的原理和用法。序列化可以让我们将对象转换成字节流,并存储到文件或传输到其他地方;反序列化则可以将字节流转换回对象,实现对象的恢复。这两种操作在 Java 编程中非常常见和重要,希望本文对大家有所帮助。



8288分类目录声明:本站部分文章来源于网络,版权属于原作者所有。如有转载或引用文章/图片涉及版权问题,请联系我们处理.我们将在第一时间删除! 联系邮箱:tsk@qq.com

推荐网站

最新加入网站 TOP5

入站排行榜 TOP5