Java序列化与反序列化
2021/7/10 17:11:29
本文主要是介绍Java序列化与反序列化,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
目录
知识点
代码(伪)
代码(全)
知识点
序列化:
百度:序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。
反序列化:
反序列化是序列化的逆向过程,如果说序列化是为了写入,那反序列化就是为了读取。
代码(伪)
先写伪代码,全部代码请移步“代码(全)”。
首先我们需要一个类来定义需要存哪些数据:
class Person implements Serializable { //序列id private static final long serialVersionUID = -7258009537827358766L; //定义变量 private String name; private int age; //定义getName和setName等函数,用于输出数据和设置数据。 //可以用eclipse中(鼠标右键)->(source)->(Generate Getters and Setters)自动生成 public String getName() {} public void setName(String name) {} public int getAge() {} public void setAge() {} //用于输出姓名年龄。 public String toString() {} }
然后我们写序列化:
//实例化Person类,接下来给其赋值。 Person s1=new Person(); //setName和setAge是Person类中定义的方法 s1.setName("张三"); s1.setAge(20); //FileOutputStream用于确定存储地址 FileOutputStream fStream =new FileOutputStream("D:\\text\\test.txt"); //ObjectOutputStream用于写入数据 ObjectOutputStream out = new ObjectOutputStream(fStream); //用writeObject方法,写入s1对象 out.writeObject(s1); System.out.println("写入成功"); //随手关闭是个好习惯 out.close();
结果:
记事本显示的是乱码?没关系,因为序列化后存入的是一个二进制串,记事本没有与之匹配的编码格式用于读取,我们需要用反序列化读取数据。
反序列化:
/*反序列化*/ //FileInputStream用于确定存储地址 FileInputStream fStream =new FileInputStream("D:\\text\\test.txt"); //ObjectInputStream用于读取数据 ObjectInputStream in = new ObjectInputStream(fStream); //我们需要实例化一个Person类来接收数据 Person per = (Person) in.readObject(); //这里的toString()在Person类中重写过,用于输出数据。 System.out.println(per.toString()); //不要忘了关 in.close();
结果:
成功调用toString()方法读取数据。
代码(全)
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; public class test { public static void main(String[] args) { Person s1=new Person();//实例化Person类,接下来给其赋值。 s1.setName("张三"); s1.setAge(20); try{ /*序列化*/ FileOutputStream fStream =new FileOutputStream("D:\\text\\test.txt");//选择用于存储的文件 ObjectOutputStream out = new ObjectOutputStream(fStream); out.writeObject(s1);//写入s1对象 System.out.println("写入成功"); out.close();//随手关闭是个好习惯 /*反序列化*/ /*FileInputStream fStream =new FileInputStream("D:\\text\\test.txt"); ObjectInputStream in = new ObjectInputStream(fStream); Person per; try { per = (Person) in.readObject(); System.out.println(per.toString());//这里的toString()在Person类中重写过,用于输出数据。 } catch (ClassNotFoundException e) { e.printStackTrace(); } in.close();*/ } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } class Person implements Serializable { /*序列化与反序列化需要Serializable来定义id,没有会报错*/ private static final long serialVersionUID = -7258009537827358766L; private String name; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String toString() { return "person:name="+name+",age="+age+"."; } }
这篇关于Java序列化与反序列化的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-19环境变量处理课程:新手入门教程
- 2024-09-19接口模块封装课程:新手入门指南
- 2024-09-19请求动作封装课程:新手入门教程
- 2024-09-19拖拽表格课程:新手入门指南
- 2024-09-19页面权限课程:新手必学的权限管理入门教程
- 2024-09-19如何正确主动登出课程:新手必读教程
- 2024-09-19Element-Plus课程:新手入门与初级教程
- 2024-09-19Token处理入门教程:新手必看指南
- 2024-09-19如何应对被动登出课程的情况:新手必读指南
- 2024-09-19打包优化课程:初学者的必备指南