java中对象的序列化与反序列化深入讲解-创新互联
引言:
创新互联公司专注于安居网站建设服务及定制,我们拥有丰富的企业做网站经验。 热诚为您提供安居营销型网站建设,安居网站制作、安居网页设计、安居网站官网定制、微信平台小程序开发服务,打造安居网络公司原创品牌,更为您提供安居网站排名全网营销落地服务。序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。
- 把对象转换为字节序列的过程称为对象的序列化。
- 把字节序列恢复为对象的过程称为对象的反序列化。
在很多应用中,需要对某些对象进行序列化,让它们离开内存空间,入住物理硬盘,以便长期保存。比如最常见的是Web服务器中的Session对 象,当有 10万用户并发访问,就有可能出现10万个Session对象,内存可能吃不消,于是Web容器就会把一些seesion先序列化到硬盘中,等要用了,再把保存在硬盘中的对象还原到内存中。
当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个Java对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为Java对象。
序列化是将对象的状态信息转换为可以存储或传输的形式的过程,在序列化期间,对象将其带你过去的状态写入到临时或持储存区,反序列化就是重新创建对象的过程,此对象来自于临时或持久储存区。
序列化的作用:
就好比如存储数据到数据库,将一些数据持久化到数据库中,而有时候需要将对象持久化,虽然说将对象状态持久化的方式有很多,但是java给我们提供了一种很便捷的方式,那就是序列化,序列化可以实现对象到文件之间的直接转换,实现细节对我们隐藏。
具体的三种用途:
- 将对象的状态信息持久化保存到硬盘上
- 将对象信息在网络上传输
- 深度克隆(就是序列化后再反序列化)
方式一:实现Serializable接口,通过序列化流
实现Serializable接口,通过ObjectOutputStream和ObjectInputStream将对象序列化和反序列化。
import java.io.*; public class User implements Serializable { private static final long serialVersionUID = 1L; private String name; private int age; public User(String name, int age) { this.name = name; this.age = age; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + '}'; } public static void main(String[] args) throws IOException, ClassNotFoundException { // User user = new User("gol",22); // ByteArrayOutputStream bo = new ByteArrayOutputStream(); // ObjectOutputStream oo = new ObjectOutputStream(bo); // oo.writeObject(user);//序列化.user写入字节数组流中 // ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray()); // ObjectInputStream oi = new ObjectInputStream(bi); // User userSer = (User) oi.readObject();//反序列化 // System.out.println(userSer); User user = new User("gol",22); FileOutputStream fos = new FileOutputStream("a.txt"); ObjectOutputStream oo = new ObjectOutputStream(fos); oo.writeObject(user);//序列化.user写入文件中 FileInputStream fis = new FileInputStream("a.txt"); ObjectInputStream oi = new ObjectInputStream(fis); User userSer = (User) oi.readObject();//反序列化 System.out.println(userSer); oi.close(); fis.close(); oo.close(); fos.close(); } }
新闻名称:java中对象的序列化与反序列化深入讲解-创新互联
标题链接:http://scyanting.com/article/dsoodj.html