JAVA序列化 Serializable 将对象转为数组,再反过来将数组转为对象

简介: JAVA序列化 Serializable 将对象转为数组,再反过来将数组转为对象

序列化过程中,其对象想要被序列化,那么它的类就要实现 此接口,这个对象的所有属性(包括private属性、包括其引用的对象)都可以被序列化和反序列化来保存、传递。


比如:在本实例中,DivSort必须实现Serializable接口,不实现的话,会在序列化过程中报错,一般会在o.writeObject(obj)的这一步骤报错。


import java.io.Serializable;
public class DivSort implements Serializable{
 public int age;
 public String name;
 public int score;
  public DivSort(int age, String name, int score) {
  super();
  this.age = age;
  this.name = name;
  this.score = score;
}
  public int getAge() {
  return age;
}
public void setAge(int age) {
  this.age = age;
}
public String getName() {
  return name;
}
public void setName(String name) {
  this.name = name;
}
public int getScore() {
  return score;
}
public void setScore(int score) {
  this.score = score;
}
}


import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
import java.util.ArrayList;
public class ArrayToByte{
  /**
   * 
   */
  private static final long serialVersionUID = 1L;
  public static void main(String[] args) throws IOException, ClassNotFoundException {
    // TODO Auto-generated method stub
    ArrayList<DivSort>  list1=new ArrayList<DivSort>();
    byte[] b=null;
    list1.add(new DivSort(12,"zhansan",234));
    list1.add(new DivSort(13,"zhansan",234));
    list1.add(new DivSort(14,"zhansan",234));
    for(DivSort l:list1) {
      System.out.println(l.age);
    }
    System.out.println("start");
    b=ArrayToByte.serialize(list1);
    System.out.println(b);
    System.out.println(ArrayToByte.deserialize(b));
    list1=(ArrayList<DivSort>) ArrayToByte.deserialize(b);
    for(DivSort d:list1) {
      System.out.println(d.getAge());
    }
  }
   public static byte[] serialize(Object obj) throws IOException {
          try(ByteArrayOutputStream b = new ByteArrayOutputStream()){
              try(ObjectOutputStream o = new ObjectOutputStream(b)){
                  o.writeObject(obj);
              }
              return b.toByteArray();
          }
      }
      public static Object deserialize(byte[] bytes) throws IOException, ClassNotFoundException {
          try(ByteArrayInputStream b = new ByteArrayInputStream(bytes)){
              try(ObjectInputStream o = new ObjectInputStream(b)){
                  return o.readObject();
              }
          }
      }
}



目录
打赏
0
0
0
0
7
分享
相关文章
|
4月前
|
🌟Java零基础-反序列化:从入门到精通
【10月更文挑战第21天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
135 5
Java编程中的对象序列化与反序列化
【10月更文挑战第22天】在Java的世界里,对象序列化和反序列化是数据持久化和网络传输的关键技术。本文将带你了解如何在Java中实现对象的序列化与反序列化,并探讨其背后的原理。通过实际代码示例,我们将一步步展示如何将复杂数据结构转换为字节流,以及如何将这些字节流还原为Java对象。文章还将讨论在使用序列化时应注意的安全性问题,以确保你的应用程序既高效又安全。
|
4月前
|
🌟Java零基础:深入解析Java序列化机制
【10月更文挑战第20天】本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
56 3
前端的全栈之路Meteor篇(五):自定义对象序列化的EJSON介绍 - 跨设备的对象传输
EJSON是Meteor框架中扩展了标准JSON的库,支持更多数据类型如`Date`、`Binary`等。它提供了序列化和反序列化功能,使客户端和服务器之间的复杂数据传输更加便捷高效。EJSON还支持自定义对象的定义和传输,通过`EJSON.addType`注册自定义类型,确保数据在两端无缝传递。
Java编程中的对象序列化与反序列化
【10月更文挑战第9天】在Java的世界里,对象序列化是连接数据持久化与网络通信的桥梁。本文将深入探讨Java对象序列化的机制、实践方法及反序列化过程,通过代码示例揭示其背后的原理。从基础概念到高级应用,我们将一步步揭开序列化技术的神秘面纱,让读者能够掌握这一强大工具,以应对数据存储和传输的挑战。
大数据-58 Kafka 高级特性 消息发送02-自定义序列化器、自定义分区器 Java代码实现
大数据-58 Kafka 高级特性 消息发送02-自定义序列化器、自定义分区器 Java代码实现
116 3
一篇搞懂!Java对象序列化与反序列化的底层逻辑
本文介绍了Java中的序列化与反序列化,包括基本概念、应用场景、实现方式及注意事项。序列化是将对象转换为字节流,便于存储和传输;反序列化则是将字节流还原为对象。文中详细讲解了实现序列化的步骤,以及常见的反序列化失败原因和最佳实践。通过实例和代码示例,帮助读者更好地理解和应用这一重要技术。
123 0
java Serializable 生成随机序列
如果你implements 了 Serializable接口 但是没写 UID,eclipse会在你的类名边上有一个警告,你点击一下,有一个选项自动生成 UID,所以请用eclipse写java代码
745 0
|
15天前
|
【Java并发】【线程池】带你从0-1入门线程池
欢迎来到我的技术博客!我是一名热爱编程的开发者,梦想是编写高端CRUD应用。2025年我正在沉淀中,博客更新速度加快,期待与你一起成长。 线程池是一种复用线程资源的机制,通过预先创建一定数量的线程并管理其生命周期,避免频繁创建/销毁线程带来的性能开销。它解决了线程创建成本高、资源耗尽风险、响应速度慢和任务执行缺乏管理等问题。
138 60
【Java并发】【线程池】带你从0-1入门线程池
Java网络编程,多线程,IO流综合小项目一一ChatBoxes
**项目介绍**:本项目实现了一个基于TCP协议的C/S架构控制台聊天室,支持局域网内多客户端同时聊天。用户需注册并登录,用户名唯一,密码格式为字母开头加纯数字。登录后可实时聊天,服务端负责验证用户信息并转发消息。 **项目亮点**: - **C/S架构**:客户端与服务端通过TCP连接通信。 - **多线程**:采用多线程处理多个客户端的并发请求,确保实时交互。 - **IO流**:使用BufferedReader和BufferedWriter进行数据传输,确保高效稳定的通信。 - **线程安全**:通过同步代码块和锁机制保证共享数据的安全性。
53 23

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等