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



目录
相关文章
|
8月前
|
设计模式 网络协议 数据可视化
Java 设计模式之状态模式:让对象的行为随状态优雅变化
状态模式通过封装对象的状态,使行为随状态变化而改变。以订单为例,将待支付、已支付等状态独立成类,消除冗长条件判断,提升代码可维护性与扩展性,适用于状态多、转换复杂的场景。
1020 157
|
10月前
|
存储 缓存 Java
Java数组全解析:一维、多维与内存模型
本文深入解析Java数组的内存布局与操作技巧,涵盖一维及多维数组的声明、初始化、内存模型,以及数组常见陷阱和性能优化。通过图文结合的方式帮助开发者彻底理解数组本质,并提供Arrays工具类的实用方法与面试高频问题解析,助你掌握数组核心知识,避免常见错误。
|
8月前
|
JSON 网络协议 安全
【Java】(10)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
409 1
|
8月前
|
JSON 网络协议 安全
【Java基础】(1)进程与线程的关系、Tread类;讲解基本线程安全、网络编程内容;JSON序列化与反序列化
几乎所有的操作系统都支持进程的概念,进程是处于运行过程中的程序,并且具有一定的独立功能,进程是系统进行资源分配和调度的一个独立单位一般而言,进程包含如下三个特征。独立性动态性并发性。
384 1
|
9月前
|
Java
Java 数组学习笔记
本文整理Java数组常用操作:遍历、求和、查找、最值及二维数组行求和等典型练习,涵盖静态初始化、元素翻倍、去极值求平均等实例,帮助掌握数组基础与应用。
|
10月前
|
缓存 安全 Java
Java反射机制:动态操作类与对象
Java反射机制是运行时动态操作类与对象的强大工具,支持获取类信息、动态创建实例、调用方法、访问字段等。它在框架开发、依赖注入、动态代理等方面有广泛应用,但也存在性能开销和安全风险。本文详解反射核心API、实战案例及性能优化策略,助你掌握Java动态编程精髓。
|
10月前
|
存储 人工智能 JavaScript
Java从作用域到对象高级应用​
本内容详细讲解了JavaScript中的作用域类型(函数作用域、块作用域、全局作用域)、作用域链、垃圾回收机制、闭包、变量提升、函数参数、数组方法、内置构造函数、对象高级知识、原型链、对象赋值、深浅拷贝、递归、异常处理及this指向等内容,全面覆盖JS核心概念与编程技巧。
126 0
|
11月前
|
存储 Java 索引
java 数组
在 Java 中,数组是一种数据结构,用于存储多个相同类型的数据元素。数组的大小一旦创建后就不能改变,因此它是固定长度的。Java 数组是一种 对象,即使它存储的值是基本类型(如 int、double 等),它也是一个对象引用。
240 0
|
11月前
|
存储 安全 Java
深入理解Java序列化接口及其实现机制
记住,序列化不仅仅是把对象状态保存下来那么简单,它涉及到类的版本控制、安全性和性能等多个重要方面。正确理解和实现Java序列化机制对于构建高效、安全和可维护的Java应用至关重要。
317 0