JAVA的序列化与反序列化(一)

不念不忘少年蓝@ 2024-04-18 04:03 186阅读 0赞
序列化

序列化是一种对象持久化的手段。通常我们在jvm平台创建对象。但是仅仅当jvm正在运行时,对象才会存在。也就是说,当java运行停止之后,这个对象所保存的信息也就消失了。那么当我们需要保存一个java对象的信息,并需要的时候又可以把他取出来。java的序列化就可以帮我们实现。
我们对Java对象进行序列化的时候,会把其状态保存为一组字节,当我们需要的时候,又将其取出来。必须注意地是,对象序列化保存的是对象的”状态”,即它的成员变量 那么也就是说,对象序列化不会关注类中的静态变量

如何进行序列化

在Java中想要实现序列化很简单 只需要实现一个Serializable接口即可
序列化接口没有方法或字段,仅用于标识可序列化的语义

  1. public class Product implements Serializable {
  2. private String name;
  3. private double price;
  4. private String describe;
  5. public Product() {
  6. }
  7. public Product(String name, double price, String describe) {
  8. this.name = name;
  9. this.price = price;
  10. this.describe = describe;
  11. }
  12. .....部分代码省略

下面进行序列化和反序列化操作

所需要用到主要类有:
ObjectOutputStream
ObjectInputStream

  1. /** * @author hao * @create 2019-09-03 ${TIM} * //测试java对象的序列化 与反序列化 */
  2. public class SerialazableDemoTest1 {
  3. public static void main(String[] args) {
  4. Product product = new Product("电视机",3900.00,"这是一台高清");
  5. System.out.println("序列化之前"+product);
  6. // 序列化
  7. ObjectOutputStream out = null;
  8. try {
  9. out = new ObjectOutputStream(new FileOutputStream("D:\\a\\tempFile"));
  10. out.writeObject(product);
  11. } catch (IOException e) {
  12. e.printStackTrace();
  13. }finally {
  14. if (out!=null){
  15. try {
  16. out.close();
  17. } catch (IOException e) {
  18. e.printStackTrace();
  19. }
  20. }
  21. }
  22. //反序列化
  23. ObjectInputStream in = null;
  24. Product pro = null;
  25. try {
  26. in = new ObjectInputStream(new FileInputStream("D:\\a\\tempFile"));
  27. //反序列读取
  28. pro = (Product) in.readObject();
  29. } catch (IOException e) {
  30. e.printStackTrace();
  31. } catch (ClassNotFoundException e) {
  32. e.printStackTrace();
  33. } finally {
  34. if (in != null) {
  35. try {
  36. in.close();
  37. } catch (IOException e) {
  38. e.printStackTrace();
  39. }
  40. }
  41. }
  42. System.out.println("反序列化之后"+pro);
  43. }
  44. }
  45. 输出:
  46. 序列化之前Product{ name='电视机', price=3900.0, describe='这是一台高清'}
  47. 反序列化之后Product{ name='电视机', price=3900.0, describe='这是一台高清'}

然后我们进入序列化的文件夹 如图所示:

在这里插入图片描述
这个文件也就是我们序列化对象之后的文件。
我们使用ObjectOutputStream和ObjectInputStreamwriteObject方法把一个对象进行持久化。再使用ObjectInputStream的readObject从持久化存储中把对象读取出来。当我们不想序列化某个字段时 使用transient关键字,标识该字段

总结:

1、如果一个类想被序列化,需要实现Serializable接口。否则将抛出NotSerializableException异常。(至于为什么将在下一篇文章中介绍)

发表评论

表情:
评论列表 (有 0 条评论,186人围观)

还没有评论,来说两句吧...

相关阅读

    相关 java序列序列

    序列化:java对象转化为字节序列,反序列化:字节序列转化为java对象 好处:其好处一是实现了数据的持久化,通过序列化可以把数据永久地保存到硬盘上(通常存放在文件里),

    相关 Java序列序列

    Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨。  1.Java序列化与反序列化  Java序列化

    相关 Java序列序列

    基本概念: 序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。 昨天在一

    相关 java 序列序列

    一、什么是序列化与反序列化? > Java 序列化是指把 Java 对象转换为字节序列的过程; > Java 反序列化是指把字节序列恢复为 Java 对象的过程; 二、