当前位置:   article > 正文

【Java 序列化】自定义序列化器实现数据传输_java自定义序列化如何传参

java自定义序列化如何传参

序列化概念

        由于 Java 对象存放在 JVM 的堆内存当中,所以当这个对象需要拿来做数据传输(比如前后端传递、进程/模块间传递)时,就需要将 Java对象 -> 转变为二进制串,这个就是序列化的过程。而另外一边的数据接收后需要将二进制串 -> Java对象,这个就是反序列化的过程。以下实践了采用原生IO进行了对象的序列化与反序列化,后续再尝试采用其它工具包实现一下序列化器。

JDK序列化器

  1. public class JdkSerializer {
  2. /**
  3. * 序列化
  4. *
  5. * @param object 对象
  6. * @return byte[]
  7. * @throws IOException IO 异常
  8. */
  9. public byte[] serialize(Object object) throws IOException {
  10. // 1、创建存储序列化后的字节数组的输出流
  11. ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
  12. // 2、创建存储序列化后的字节数组的输出流
  13. ObjectOutputStream objectOutputStream = new ObjectOutputStream(outputStream);
  14. // 3、将对象序列化到输出流 并及时关闭资源
  15. objectOutputStream.writeObject(object);
  16. objectOutputStream.close();
  17. // 4、返回序列化后的字节数组
  18. return outputStream.toByteArray();
  19. }
  20. /**
  21. * 反序列化
  22. *
  23. * @param data byte[]
  24. * @return {@link Object}
  25. * @throws IOException IO 异常
  26. */
  27. public Object deserialize(byte[] data) throws IOException {
  28. // 1、创建存储反序列化后的字节数组的输入流
  29. ByteArrayInputStream inputStream = new ByteArrayInputStream(data);
  30. // 2、创建存储反序列化后的字节数组的输入流
  31. try (ObjectInputStream objectInputStream = new ObjectInputStream(inputStream)) {
  32. return objectInputStream.readObject();
  33. } catch (ClassNotFoundException e) {
  34. throw new RuntimeException(e);
  35. }
  36. }
  37. }

测试

  1. @Data
  2. @NoArgsConstructor
  3. @AllArgsConstructor
  4. public class User implements Serializable {
  5. /** 正反序列化而使用的 */
  6. private static final long serialVersionUID = 386L;
  7. /**
  8. * 姓名
  9. */
  10. private String name;
  11. /**
  12. * 年龄
  13. */
  14. private Integer age;
  15. }
  1. public class SerializerTest {
  2. public static void main(String[] args) {
  3. try {
  4. byte[] serialize = jdkSerializer.serialize(new User("张三", 18));
  5. // 序列化后的值: [B@5e265ba4
  6. System.out.println("序列化后的值: " + serialize);
  7. // 反序列化后的值: User(name=张三, age=18)
  8. System.out.println("反序列化后的值: " + jdkSerializer.deserialize(serialize));
  9. } catch (IOException e) {
  10. throw new RuntimeException(e);
  11. }
  12. }
  13. }

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号