51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

Java序列化解析

Java序列化是Java语言提供的一种基本能力,通过序列化,我们可以实现从对象状态到持久存储的转换,或者通过网络将对象从一个环境传输到另一个环境。

一、Java序列化的定义与理解 {#title-1}

1、序列化定义

简单地说,Java序列化是一种获取对象内存状态的技术,编码成字节流,可以完全解码字节流,恢复到与原对象相同的状态。

import java.io.*;

class A implements Serializable {   int a;   String b; }

public class TestSerialize {   public static void main(String[] args) throws IOException {     A a = new A();     a.a = 100;     a.b = "hello";

    // serialize the object     ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream("file.ser"));     out.writeObject(a);     out.close();   } }

2、序列化理解深化

Java序列化的本质是一个从对象到数据的转换过程,需要在远程通信和对象数据的持久存储中使用序列化。对于前者,计算机网络传输的基本单元是字节,因此必须将对象转换为字节才能进行网络传输;对于后者,持久数据的基本单元也是字节,因此只有将对象转换为字节才能进行持久存储。

import java.io.*;

class A implements Serializable {   int a;   String b; }

public class TestDeserialize {   public static void main(String[] args) throws IOException, ClassNotFoundException {     // deserialize the object     ObjectInputStream in = new ObjectInputStream(new FileInputStream("file.ser");     A a = (A) in.readObject();     in.close();

    // check the values     System.out.println("a = " + a.a);     System.out.println("b = " + a.b);   } }

二、Java序列化的作用 {#title-2}

1、对于Java语言来说,序列化技术主要用于三个方面:

首先,对象的持久性。将对象的字节序列永久保存在硬盘上,通常存储在文件中;


二是利用序列化实现远程传输。通过网络将对象的字节序列发送到任何可接收的地方;


第三,通过序列化实现深复制。通过BytearayInputstreame,将对象以字节序列的形式进行。、Bytearayoutputstream实现深复制。

import java.io.*;

public class TestDeepCopy {   public static Object deepCopy(Object obj) throws IOException, ClassNotFoundException {     // serialize the object     ByteArrayOutputStream bos = new ByteArrayOutputStream();     ObjectOutputStream out = new ObjectOutputStream(bos);     out.writeObject(obj);

    // deserialize the object     ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());     ObjectInputStream in = new ObjectInputStream(bis);

    return in.readObject();   } }

赞(4)
未经允许不得转载:工具盒子 » Java序列化解析