对象序列化和反序列化
1、什么是序列化与反序列化?
序列化:指把堆内存中的 Java 对象数据,通过某种方式把对象存储到磁盘文件中或者传递给其他网络节点(在网络上传输)。这个过程称为序列化。通俗来说就是将数据结构或对象转换成二进制串的过程
反序列化:把磁盘文件中的对象数据或者把网络节点上的对象数据,恢复成Java对象模型的过程。也就是将在序列化过程中所生成的二进制串转换成数据结构或者对象的过程
对象序列化必须实现Serializable接口.
实例:
public class ObjectStreamDemo {
private static final String filePath = "src/Old/test7/test7/ObjectStreamDemo.dat";
public static void main(String\[\] args) \{
Player player1 = new Player("葬爱家族",77);
//使用对象流将序列化对象写入到文件中
try (
FileOutputStream fOutStream = new FileOutputStream(filePath);
ObjectOutputStream objOutputStream = new ObjectOutputStream(fOutStream))\{
objOutputStream. writeObject(player1);
System.out.println("对象写入成功!");
\} catch (FileNotFoundException e) \{
e.printStackTrace();
\} catch (IOException e) \{
e.printStackTrace();
\}
//从文件中读取对象,转换成我们可操作的对象
try(
FileInputStream fInputStream = new FileInputStream(filePath);
ObjectInputStream objInpuStream = new ObjectInputStream(fInputStream);
)\{
Player player2 = (Player)objInpuStream. readObject();
System.out.println("读取出的对象:" + player2);
\} catch (FileNotFoundException e) \{
e.printStackTrace();
\} catch (IOException e) \{
e.printStackTrace();
\} catch (ClassNotFoundException e) \{
e.printStackTrace();
\}
}
}
class Player implements Serializable{ //实现Serializable
/**
* 若不赋值,系统会自动赋值,但会出bug
*/
private static final long serialVersionUID = -8854523782157015419L;
private String name;
private int level;
public Player()\{
\}
public Player(String name,int level){
setName(name);
setLevel(level);
}
@Override
public String toString() {
return name + “\t” + level;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getLevel() {
return level;
}
public void setLevel(int level) {
this.level = level;
}
}
还没有评论,来说两句吧...