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



目录
相关文章
|
5天前
|
存储 Java 程序员
Java 数组
4月更文挑战第16天
|
13天前
|
存储 Java
Java输入输出:解释一下序列化和反序列化。
Java中的序列化和反序列化是将对象转换为字节流和反之的过程。ObjectOutputStream用于序列化,ObjectInputStream则用于反序列化。示例展示了如何创建一个实现Serializable接口的Person类,并将其序列化到文件,然后从文件反序列化回Person对象。
19 5
|
27天前
|
Java
java 8 数组转字符串并以逗号分隔
java 8 数组转字符串并以逗号分隔
11 0
|
1月前
|
Java
【Java】数组中的拷贝方法与初步理解深浅拷贝
【Java】数组中的拷贝方法与初步理解深浅拷贝
13 0
|
1月前
|
存储 Java C语言
【Java】以数组为例简单理解引用类型变量
【Java】以数组为例简单理解引用类型变量
15 1
|
1月前
|
存储 Java 索引
Java数组
Java数组
7 0
|
1月前
|
Java
java中判断数组中元素出现的次数
java中判断数组中元素出现的次数
10 0
|
1月前
|
Java
java向数组中插入元素
java向数组中插入元素
9 0
|
1月前
|
存储 Java 索引
JAVA一维数组
JAVA一维数组
19 3
|
1月前
|
Java 索引
JAVA数组的常用方法
JAVA数组的常用方法
17 1