首页 > 编程知识 正文

Java序列化深度解析

时间:2023-11-22 10:53:23 阅读:308342 作者:AWFK

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

一、Java序列化的定义与理解

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序列化的作用

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

第一,对象的持久化。 把对象的字节序列永久地保存到硬盘上,通常存放在文件里;

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

第三,通过序列化实现深复制。 把对象以字节序列的方式通过ByteArrayInputStream、ByteArrayOutputStream实现深复制。

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();
  }
}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。