版权声明:本文为博主原创文章,未经博主允许不得转载。 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对象进行序化,把得到的字节序列写到一个目标输出流中。
- oos.writeObject(entiy)
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();
}
}
}