通过实现Serializable接口,实现对象的序列化与反序列化 (2)将序列化后的对象,以JSON形式或自定义的形式保存在文本文件 (3) 利用改文件实现对象的反序列化 (4)序列化过程中体验transient关键词 参考:
时间: 2024-05-03 21:21:09 浏览: 52
1. 实现Serializable接口
首先,要实现对象的序列化与反序列化,需要让对象所属的类实现Serializable接口。例如,我们有一个Person类,需要将其序列化,那么就需要在类的定义上加上“implements Serializable”:
```java
public class Person implements Serializable {
private String name;
private int age;
// ...
}
```
2. 序列化对象并保存到文件
要将序列化后的对象保存到文件,可以使用Java中的ObjectOutputStream类。首先,创建一个FileOutputStream对象,用于将数据写入文件:
```java
FileOutputStream fos = new FileOutputStream("person.ser");
```
然后,创建一个ObjectOutputStream对象,将其连接到FileOutputStream对象上:
```java
ObjectOutputStream oos = new ObjectOutputStream(fos);
```
接下来,使用ObjectOutputStream的writeObject方法将Person对象序列化并写入文件:
```java
Person person = new Person("Alice", 25);
oos.writeObject(person);
```
最后,关闭ObjectOutputStream和FileOutputStream对象:
```java
oos.close();
fos.close();
```
这样,就将序列化后的Person对象保存在了名为“person.ser”的文件中。
3. 将序列化后的对象以JSON形式或自定义形式保存在文本文件
如果想将序列化后的对象以JSON形式保存在文本文件中,可以使用Java中的Gson库。首先,需要在pom.xml文件中添加以下依赖:
```xml
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.8.7</version>
</dependency>
```
然后,创建一个Gson对象,将Person对象转换成JSON格式的字符串:
```java
Gson gson = new Gson();
String json = gson.toJson(person);
```
接下来,将JSON字符串写入文件中:
```java
FileWriter writer = new FileWriter("person.json");
writer.write(json);
writer.close();
```
如果想以自定义形式保存对象,可以先将对象的各个属性拼接成一个字符串,然后将该字符串写入文件中:
```java
String data = person.getName() + "," + person.getAge();
FileWriter writer = new FileWriter("person.txt");
writer.write(data);
writer.close();
```
4. 反序列化对象
要反序列化对象,可以使用Java中的ObjectInputStream类。首先,创建一个FileInputStream对象,用于从文件中读取数据:
```java
FileInputStream fis = new FileInputStream("person.ser");
```
然后,创建一个ObjectInputStream对象,将其连接到FileInputStream对象上:
```java
ObjectInputStream ois = new ObjectInputStream(fis);
```
接下来,使用ObjectInputStream的readObject方法读取文件中的数据,并将其转换为Person对象:
```java
Person person = (Person) ois.readObject();
```
最后,关闭ObjectInputStream和FileInputStream对象:
```java
ois.close();
fis.close();
```
这样,就从文件中反序列化出了Person对象。
5. transient关键词的使用
transient关键词可以用于指定某些属性不参与序列化。例如,如果Person类中有一个不需要序列化的属性id,可以将其声明为transient:
```java
public class Person implements Serializable {
private String name;
private int age;
private transient int id;
// ...
}
```
这样,在将Person对象序列化时,id属性就会被忽略。反序列化时,id属性的值会被设置为默认值0。