序列化与反序列化
来源:互联网 发布:sql和access的区别 编辑:程序博客网 时间:2024/05/21 10:24
1、 什么是序列化和反序列化
Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deserialization是一种将这些字节重建成一个对象的过程。
2、 什么情况下需要序列化
a)当你想把的内存中的对象保存到一个文件中或者数据库中时候;
b)当你想用套接字在网络上传送对象的时候;
c)当你想通过RMI传输对象的时候;
3、 如何实现序列化
将需要序列化的类实现Serializable接口就可以了,Serializable接口中没有任何方法,可以理解为一个标记,即表明这个类可以序列化。
4、序列化和反序列化例子
如果我们想要序列化一个对象,首先要创建某些OutputStream(如FileOutputStream、ByteArrayOutputStream等),然后将这些OutputStream封装在一个ObjectOutputStream中。这时候,只需要调用writeObject()方法就可以将对象序列化,并将其发送给OutputStream(记住:对象的序列化是基于字节的,不能使用Reader和Writer等基于字符的层次结构)。而反序列的过程(即将一个序列还原成为一个对象),需要将一个InputStream(如FileInputstream、ByteArrayInputStream等)封装在ObjectInputStream内,然后调用readObject()即可。
5、序列化ID
序列化 ID 在 Eclipse 下提供了两种生成策略,一个是固定的 1L,一个是随机生成一个不重复的 long 类型数据(实际上是使用 JDK 工具生成),在这里有一个建议,如果没有特殊需求,就是用默认的 1L 就可以,这样可以确保代码一致时反序列化成功。这也可能是造成序列化和反序列化失败的原因,因为不同的序列化id之间不能进行序列化和反序列化。
注意:被static,transient修饰的变量不能被序列化;
代码:
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;
import java.util.Arrays;
class Animal implements Serializable {
/**
*
*/
private static final long serialVersionUID = 8822818790694831649L;
private String name;
private String color;
private String[] alias;
public String getName() { return name;}public void setName(String name) { this.name = name;}public String getColor() { return color;}public void setColor(String color) { this.color = color;}public String[] getAlias() { return alias;}public void setAlias(String[] alias) { this.alias = alias;}@Overridepublic String toString() { return "Animal [alias=" + Arrays.toString(alias) + ", color=" + color + ", name=" + name + "]";}// 序列化: 是一种将对象以一连串的字节描述的过程static void serializable() throws FileNotFoundException, IOException{ ObjectOutputStream oos = null; try { oos = new ObjectOutputStream(new FileOutputStream("D://animal.dat")); Animal animal = new Animal(); animal.setName("加菲"); animal.setColor("Black"); animal.setAlias(new String[]{"xiaoHei", "Gou", "GuaiGuai"}); oos.writeObject(animal); oos.flush(); } finally { if(null != oos){ oos.close(); } }}//反序列化:是一种将这些字节重建成一个对象的过程static void unserializable() throws FileNotFoundException, IOException, ClassNotFoundException{ ObjectInputStream ois = null; try { ois = new ObjectInputStream(new FileInputStream("D://animal.dat")); Animal animal = (Animal) ois.readObject();//由Object对象向下转型为Animal对象 System.out.println(animal); System.out.println(animal.getColor()); System.out.println(animal.getName()); System.out.println(animal.getAlias()); } finally { if( null != ois ){ ois.close(); } }}public static void main(String[] args) {
// try {
// Animal.unserializable();
// } catch (Exception e) {
// e.printStackTrace();
// }
//
try {
Animal.serializable();
} catch (Exception e) {
e.printStackTrace(); }}
}
- 序列化与反序列
- 序列化与反序列
- XML序列化与反序列化
- 对象序列化与反序列化
- 序列化与反序列化
- 转载:序列化与反序列化
- c#序列化与反序列化
- java序列化与反序列化
- XML序列化与反序列化
- 序列化与反序列化
- 序列化与反序列化
- C#序列化与反序列化
- java序列化与反序列化
- XML序列化与反序列化
- 再看序列化与反序列化
- 序列化与反序列化对象
- 序列化与反序列化
- .NET序列化与反序列化
- altium生成PCB的BOM时comment下的字excel2003无法完全显示及解决办法
- 自顶向下,逐步求精
- MySQL 主从同步延迟的原因及解决办法
- linux c产生随机数rand(),srand()
- android学习---Fragment
- 序列化与反序列化
- 20171129thus10
- mysql导入导出csv
- 普宁跨境电商外贸 之 教你识破骗子的万能手段
- 最近用springboot框架,通过tomcat4e启动遇到的错误。
- 区块链技术对各行各业的影响有哪些
- RecyclerView 之通用适配
- Autodesk Revit LT 2018 官方免费版下载附安装教程
- Angularjs2项目打包发布以及部署在Linux上