当前位置: 首页 > 编程笔记 >

Java原生序列化和反序列化代码实例

谢骏奇
2023-03-14
本文向大家介绍Java原生序列化和反序列化代码实例,包括了Java原生序列化和反序列化代码实例的使用技巧和注意事项,需要的朋友参考一下

这篇文章主要介绍了Java原生序列化和反序列化代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

写一个Java原生的序列化和反序列化的DEMO。

需序列化的类:

package com.nicchagil.nativeserialize;

import java.io.Serializable;

public class User implements Serializable {

  private static final long serialVersionUID = 1L;

  private Integer id;
  private String userName;
  
  public User(Integer id, String userName) {
    super();
    this.id = id;
    this.userName = userName;
  }

  public Integer getId() {
    return id;
  }

  public void setId(Integer id) {
    this.id = id;
  }

  public String getUserName() {
    return userName;
  }

  public void setUserName(String userName) {
    this.userName = userName;
  }

  public static long getSerialversionuid() {
    return serialVersionUID;
  }

  @Override
  public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((id == null) ? 0 : id.hashCode());
    result = prime * result
        + ((userName == null) ? 0 : userName.hashCode());
    return result;
  }

  @Override
  public boolean equals(Object obj) {
    if (this == obj)
      return true;
    if (obj == null)
      return false;
    if (getClass() != obj.getClass())
      return false;
    User other = (User) obj;
    if (id == null) {
      if (other.id != null)
        return false;
    } else if (!id.equals(other.id))
      return false;
    if (userName == null) {
      if (other.userName != null)
        return false;
    } else if (!userName.equals(other.userName))
      return false;
    return true;
  }

  @Override
  public String toString() {
    return "User [id=" + id + ", userName=" + userName + "]";
  }

}

工具类:

package com.nicchagil.nativeserialize;

import java.io.File;
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;

public class NativeSerializeTools {

  /**
   * 序列化
   * @param filePath 序列化的路径
   * @param s 序列化的对象
   */
  public static void write(String filePath, Serializable s) throws FileNotFoundException, IOException {
    if (filePath == null || filePath.length() == 0) {
      throw new RuntimeException("请传入序列化路径");
    }
    
    if (s == null) {
      throw new RuntimeException("请传入序列化对象");
    }
    
    File f = new File(filePath);
    
    ObjectOutputStream oos = null;
    FileOutputStream fos = null;
    try {
      fos = new FileOutputStream(f);
      oos = new ObjectOutputStream(fos);
      oos.writeObject(s);
      System.out.println("finish.");
    } finally {
      if (oos != null) {
        oos.close();
      }
      if (fos != null) {
        fos.close();
      }
      System.out.println("close the resource.");
    }
  }
  
  /**
   * 反序列化
   * @param filePath 反序列化的路径
   * @return 反序列化的对象
   */
  public static Object read(String filePath) throws ClassNotFoundException, FileNotFoundException, IOException {
    if (filePath == null || filePath.length() == 0) {
      throw new RuntimeException("请传入反序列化路径");
    }
    
    File f = new File(filePath);
    
    ObjectInputStream ois = null;
    FileInputStream fis = null;
    Object o = null;
    try {
      fis = new FileInputStream(f);
      ois = new ObjectInputStream(fis);
      o = ois.readObject();
      System.out.println("finish.");
    } finally {
      if (ois != null) {
        ois.close();
      }
      if (fis != null) {
        fis.close();
      }
      System.out.println("close the resource.");
    }
    
    return o;
  }

}

测试类:

package com.nicchagil.nativeserialize;

import java.io.FileNotFoundException;
import java.io.IOException;

import org.junit.Assert;
import org.junit.Test;

public class HowToUse {
  
  private User user = new User(100, "Nick Huang");
  private String filePath = "d:/user.txt";
  
  @Test
  public void c1() throws FileNotFoundException, IOException {
    NativeSerializeTools.write(filePath, user);
  }
  
  @Test
  public void c2() throws FileNotFoundException, IOException, ClassNotFoundException {
    Object o = NativeSerializeTools.read(filePath);
    
    System.out.println(o);
    Assert.assertTrue(user.equals(o));
  }

}

日志:

finish.
close the resource.
finish.
close the resource.
User [id=100, userName=Nick Huang]

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持小牛知识库。

 类似资料:
  • 主要内容:1 Java序列化和反序列化,2 Java序列化的优点,3 java.io.Serializable接口,4 Java ObjectOutputStream,5 Java ObjectInputStream,6 Java序列化的例子,7 Java反序列化的例子1 Java序列化和反序列化 Java中的序列化是一种将对象状态写入字节流的机制。它主要用于Hibernate,RMI,JPA,EJB和JMS技术。 序列化的反向操作称为反序列化,其中字节流被转换为对象。序列化和反序列化过程与平台

  • 本文向大家介绍C#实现的json序列化和反序列化代码实例,包括了C#实现的json序列化和反序列化代码实例的使用技巧和注意事项,需要的朋友参考一下

  • 本文向大家介绍Java 序列化和反序列化实例详解,包括了Java 序列化和反序列化实例详解的使用技巧和注意事项,需要的朋友参考一下 Java 序列化和反序列化实例详解 在分布式应用中,对象只有经过序列化才能在各个分布式组件之间传输,这就涉及到两个方面的技术-发送者将对象序列化,接受者将对象反序列化,下面就是一个很好的例子! 1.实体-Employee 2.SerializeHelper 3.测试类

  • 本文向大家介绍Python 序列化和反序列化库 MarshMallow 的用法实例代码,包括了Python 序列化和反序列化库 MarshMallow 的用法实例代码的使用技巧和注意事项,需要的朋友参考一下 序列化(Serialization)与反序列化(Deserialization)是RESTful API 开发中绕不开的一环,开发时,序列化与反序列化的功能实现中通常也会包含数据校验(Vali

  • 本文向大家介绍详解PHP序列化和反序列化原理,包括了详解PHP序列化和反序列化原理的使用技巧和注意事项,需要的朋友参考一下 0.前言 对象的序列化和反序列化作用就不再赘述,php中序列化的结果是一个php自定义的字符串格式,有点类似json. 我们在任何语言中设计对象的序列化和反序列化都需要解决几个问题 把某个对象序列化之后,序列化的结果有自描述的功能(从序列化的结果中知道这个对象的具体类型, 知

  • 我试图通过CLI反序列化保存为protobuf的文件(似乎是最容易做到的事情)。我不希望使用protoc进行编译,将其导入编程语言,然后读取结果。 我的用例:一个TensorFlow lite工具以原型格式输出了一些数据。我也在TensorFlow存储库中找到了原型定义。我只想快速阅读输出。具体来说,我正在从工具中获取消息。

  • 问题内容: 我尝试过在Java和Android之间实现跨平台序列化。我使用了Serializable,并将我的代码在Android中与台式机Java放在同一软件包中。 来源:java-desktop序列化 资料来源:Android-反序列化 学生是一类,实现了Serializable。在桌面上,我将学生实例序列化为“ thestudent.dat”。我将此文件放在Android设备上的SD卡上,并

  • 上一小节我们学习了 Java 的输入输出流,有了这些前置知识点,我们就可以学习 Java 的序列化了。本小节将介绍什么是序列化、什么是反序列化、序列化有什么作用,Serializable 接口以及 Externalizable 接口,常用序列化工具介绍等内容。 1. 序列化与反序列化 序列化在计算机科学的数据处理中,是指将数据结构或对象状态转换成可取用格式,以留待后续在相同或另一台计算机环境中,能