Java 序列化和反序列化实例详解

时间:2022-09-26 19:27:14

Java 序列化反序列化实例详解

在分布式应用中,对象只有经过序列化才能在各个分布式组件之间传输,这就涉及到两个方面的技术-发送者将对象序列化,接受者将对象反序列化,下面就是一个很好的例子!

1.实体-Employee

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import java.io.Serializable;
 
public class Employee implements Serializable{
  /**
   *
   */
  private static final long serialVersionUID = 1L;
  public String getName() {
    return name;
  }
  public void setName(String name) {
    this.name = name;
  }
  public int getAge() {
    return age;
  }
  public void setAge(int age) {
    this.age = age;
  }
  private String name;
  private int age;
}

2.SerializeHelper

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
 
public class SerializeHelper {
  public byte[] Serialize(Object object) {
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    try {
      ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
      //将对象写入到字节数组中进行序列化
      objectOutputStream.writeObject(object);
      return byteArrayOutputStream.toByteArray();
    } catch (IOException e) {
      e.printStackTrace();
    }
    return null;
  }
   
  public Object deSerialize(byte[] bytes) {
    //将二进制数组导入字节数据流中
    ByteArrayInputStream byteArrayInputStream = new ByteArrayInputStream(bytes);
    try {
      //将字节数组流转化为对象
      ObjectInputStream objectInputStream = new ObjectInputStream(byteArrayInputStream);
      return objectInputStream.readObject();
    } catch (IOException e) {
      e.printStackTrace();
    } catch (ClassNotFoundException e) {
      e.printStackTrace();
    }
    return null;
  }
}

3.测试类

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public class Hello {
 
  /**
   * @param args
   */
  public static void main(String[] args) {
    // TODO Auto-generated method stub
    SerializeHelper serializeHelper = new SerializeHelper();
    Employee employee = new Employee();
    employee.setName("admin");
    employee.setAge(20);
    byte[] serializObject = serializeHelper.Serialize(employee);
    System.out.println(serializObject);
     
    Employee e = (Employee)serializeHelper.deSerialize(serializObject);
    System.out.println("Name: " + e.getName()+",Age: " + e.getAge());
  }
}

4.输出

?
1
2
[B@e05d173
Name: admin,Age: 20

5.总结

序列化和反序列化还有其他的框架可以完成,比如Hession,有机会再研究!

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

原文链接:http://blog.csdn.net/afandaafandaafanda/article/details/49159141