IO中的序列化和反序列化
序列化:
反序列化:
对象序列化的作用:
- 持久化:把对象的字节序列永久的保存在硬盘中,通常放在一个文件中
- 网络通信化:在网络上传送对象的字节序列化,比如:服务器之间的数据通信、对象传递
序列化和反序列化的使用:
- 序列化:
- ObjectOutPutStream(java.io.ObjectOutputStream):代表对象的输出流,进行序列化
- 它的 writeObject(Object obj) 方法可对参数指定的obj对象进行序列化,将得到的序列化写入到一个目标输入流中
- 反序列化:
- ObjectInputStream (java.io.ObjectInputStream):代表对象的输入流,进行反序列化
- 它的 readObject() 方法从一个源输入流中读取字节序列,再将它们返回成为一个对象,并将其返回
注意:
- 只有实现了 Serializable(java.ioSerializable ) 接口的类才能被序列化,Serializable 接口是一个空接口,只起到标记作用
- Serializable 接口是启用其序列化功能的接口。实现java.io.Serializable 接口的类是可序列化的。没有实现此接口的类将不能使它们的任意状态被序列化或逆序列化。 —百度解释
- serialVersionUID 用来表明实现序列化类的不同版本间的兼容性。
- serialVersionUID作用: 序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性。
IO中的序列化和反序列化实列
主要代码类
package text.ling.io;
import text.ling.seria.TwentiethDemoSerializable;
import java.io.*;
/**
* @Package: text.ling.io
* @ClassName: TwentiethDemo
* @Author: Ling
* @Date: 2021/2/6 16:46
* @Description:通过对象流操作对象
* 将对象序列化到文件: ObjectOutputStream 可以将一个内存中的 java 对象通过序列化写入到磁盘的文件
* 序列化的必须实现 Serializable 序列化接口
* TwentiethDemoSerializable.class 对象类,包含了一些对象实例的基本属性
*/
public class TwentiethDemo {
public static void main(String[] args) {
// oos();
ois();
}
/**
* 写入到文件中
* 将 Java 对象序列化到文件(内存)中
* @return
*/
public static void oos(){
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(new FileOutputStream("F:\\JavaIo\\object\\Serializable.txt"));
TwentiethDemoSerializable ts = new TwentiethDemoSerializable();
ts.setUserid(1);
ts.setUsername("甲一");
ts.setPassword("123456");
oos.writeObject(ts);
oos.flush();
System.out.println("完成");
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
oos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 从文件中读取出来
* 将对象反序列化到内存中
* @return
*/
public static void ois(){
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(new FileInputStream("F:\\JavaIo\\object\\Serializable.txt"));
TwentiethDemoSerializable ts = (TwentiethDemoSerializable) ois.readObject();
System.out.println("编号:"+ts.getUserid()+" 姓名:"+ts.getUsername()+" 密码:"+ts.getPassword());
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
try {
ois.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
对象类(TwentiethDemoSerializable.class)
package text.ling.seria;
import java.io.Serializable;
/**
* @Package: text.ling.seria
* @ClassName: TwentiethDemoSerializable
* @Author: Ling
* @Date: 2021/2/6 16:50
* @Description:
*/
public class TwentiethDemoSerializable implements Serializable {
private int userid;
private String username;
private String password;
public TwentiethDemoSerializable() {
}
public TwentiethDemoSerializable(int userid, String username, String password) {
this.userid = userid;
this.username = username;
this.password = password;
}
public int getUserid() {
return userid;
}
public void setUserid(int userid) {
this.userid = userid;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "TwentiethDemoSerializable{" +
"userid=" + userid +
", username='" + username + '\'' +
", password='" + password + '\'' +
'}';
}
}
以上为本人总结,如果更深的研究奉上大佬文章