Java 序列化 和 反序列化

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Calvin_1016280226/article/details/79683463
Serializable And Deserialize

0.思维导图

三月 25, 2018. Created by XMind

1.Serializable
  • 中译:序列化
  • 含义:Java对象 转换成为字节序列的过程。
  • 作用:
    • 当两个进程进行远程通信时,可以相互发送各种类型的数据,包括文本、图片、音频、视频等, 而这些数据都会以二进制序列的形式在网络上传送
    • 发送方:需要把这个Java对象转换为字节序列,然后在网络上传送
  • 优势:
    • 实现了数据的持久化,通过序列化可以把数据永久地保存到硬盘
    • 利用序列化实现远程通信,即在网络上传送对象的字节序列

    1.1 如何实现序列化
  • 1.实现序列化接口 implements Serializable。
  • 2.将实体对象进行序列化(输出流--写)。
    • 将文件输出流 ==>> 实体输出流
      • FileOutputStream fos = new FileOutputStream(File file);
      • ObjectOutputStream oos = new ObJectOutputStream(fos);
  • 3.将实体写入到对象输出流的当中
    • oos.writeObject(entiy)
      • writeObject(Object obj)方法:可以对参数指定的obj对象进行序化,把得到的字节序列写到一个目标输出流中。

package com.base.io;

import lombok. AllArgsConstructor ;
import lombok. Data ;
import lombok. NoArgsConstructor ;
import java.io.*;

/**
* Created by Calvin On 2017/12/19.
* 序列化
* 1. 实现序列化接口 implements Serializable
* 2. 将实体对象进行序列化(把得到的字节序列写到目标输出流中)
* 3.通了对象输出流写入实体到文件中去
*/
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SerializableByEntiy implements Serializable {

private String name ;
private String proprety ;


public static void main(String[] args) {
SerializableByEntiy entiy = new SerializableByEntiy( " 序列化 " , " 序列化需要的属性 " );

try {
// 在该文件路径下 , 创建一个新文件
File createFileByPath = new File( "D: \\ Eclipse_WorkSpace \\ JAVA_SE \\ SerializableDemon.txt" );
Boolean createResult = createFileByPath.createNewFile();

if (createResult == false ){
System. out .println( " 创建失败 " );
} else {
System. out .println( " 创建成功 : " + createFileByPath.toString());
}

// 实体对象序列化过程(将文件输出流 转化为 对象输出流)
FileOutputStream fos = new FileOutputStream(createFileByPath); // 文件输出流
ObjectOutputStream oos = new ObjectOutputStream(fos); // 对象输出流

oos.writeObject(entiy); // 实体写入
oos.flush(); // 清空对象输出流
oos.close(); // 关闭对象输出流
fos.close(); // 关闭文件输出流

} catch (IOException e) {
e.printStackTrace();
}

}

}

结果: 打开SerializableDemon.txt文件

2.Deserialize
  • 中译:反序列化
  • 含义: 字节 恢复为 Java 对象 的过程。
  • 作用:
    • 接收方:需要从字节序列中恢复出Java对象

2.1 如何实现反序列化
  • 1.获取文件
  • 2.将文件进行反序化 (输入流--读)
    • FileInputStream fis = new FileInputStream(file);
    • ObjectInputStream ois = new ObjectInputStream(fis);
  • 3.读取文件对象(读取实体)
    • SerializableByEntiy serializableByEntiy = (SerializableByEntiy) ois.readObject();

import lombok. NoArgsConstructor ;

import java.io.*;

/**
* Created by Calvin On 2017/12/19.
* 反序列化
* 1. 创建一个对象输入流,它可以包装一个其它类型输入流
* 2. 通过对象输出流 readObject() 方法读取对象
*/
@Data
@NoArgsConstructor
public class Deserialize implements Serializable{

/**
* 反序列化过程
* @param args
*/
public static void main(String[] args) {
try {
// 1. 获取文件
File file = new File( "D: \\ Eclipse_WorkSpace \\ JAVA_SE \\ SerializableDemon.txt" );
// 2. 将文件放入文件输入流
FileInputStream fis = new FileInputStream(file);
// 3. 将文件流转化为 对象输入流
ObjectInputStream ois = new ObjectInputStream(fis);
// 4. 读取文件对象(读取实体)
SerializableByEntiy serializableByEntiy = (SerializableByEntiy) ois.readObject();
// 5. 打印
System. out .println( "Name: " + serializableByEntiy.getName());
System. out .println( "property: " + serializableByEntiy.getProprety());
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}

}





猜你喜欢

转载自blog.csdn.net/Calvin_1016280226/article/details/79683463