0
点赞
收藏
分享

微信扫一扫

java对象的序列化和反序列化

覃榜言 2022-04-26 阅读 255
java

什么是对象的序列化和反序列化:

众所周知java对象是可以通过IO写入到文件或者数据库中的,这个过程也就是序列化。相反的,java应用程序也可以通过IO流从文件或者数据库中获取数据并创建对象,这个过程称之为反序列化。

实现的前提:

对象要能被序列化首先要实现序列化接口(Serializable),其次需要通过java.io.ObjectOutputStream类来具体操作;

至于反序列化则只需要java.io.ObjectIntputStream类就行了。

具体操作:

序列化:

package csdn;

import java.io.File;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

class User implements Serializable{
String name;
int age;

public void setName(String name) {
this.name = name;
}

public void setAge(int age) {
this.age = age;
}

public int getAge() {
return age;
}

public String getName() {
return name;
}
}

public class MyTest {
public static void main(String[] args)throws Exception {
File file = new File("./test.txt");
if (!file.exists()){
file.createNewFile(); //没有test.txt文件则创建
}
FileOutputStream fileOutputStream = new FileOutputStream(file); // 获取该文件的输出流
ObjectOutputStream outputStream = new ObjectOutputStream(fileOutputStream);
User user = new User(); // 要被序列化的对象
user.setAge(12);
user.setName("name");
outputStream.writeObject(user);// 将对象写入文件


}
}

代码说明:定义User类,通过输出流来将对象写入文件。

打开对应的文件,可以看到:

 对象的反序列化:

 

package csdn;

import java.io.*;

class User implements Serializable{
String name;
int age;

public void setName(String name) {
this.name = name;
}

public void setAge(int age) {
this.age = age;
}

public int getAge() {
return age;
}

public String getName() {
return name;
}
}

public class MyTest {
public static void main(String[] args)throws Exception {
File file = new File("./test.txt");
if (!file.exists()) {
file.createNewFile(); //没有test.txt文件则创建
}
ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(file));
User o = (User)inputStream.readObject(); // 反序列化
// 由于我们知道该对象是User类的对象,可以直接将对象o向下转型
System.out.println(o);
System.out.println(o.age);
System.out.println(o.name);


}
}

输出结果如下:

说明:由此可见反序列化已经完成了。 当然如果对象的成员变量是引用类型的话,对应的类同样要实现序列化接口,否则会导致序列化失败。

最后分享一下我对什么时候用输入流,什么时候用输出流的理解:数据读出内存用输入流,内存读出的用输出流。(个人见解,不喜勿喷)。

总结:文章到此结束,感谢观看!!!thank you!!!

举报

相关推荐

0 条评论