java序列化与反序列化

Posted user_孙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java序列化与反序列化相关的知识,希望对你有一定的参考价值。

 1 package com.sun.demo;
 2 
 3 import java.io.ByteArrayOutputStream;
 4 import java.io.IOException;
 5 import java.io.ObjectInputStream;
 6 import java.io.ObjectOutputStream;
 7 import java.io.Serializable;
 8 import java.sql.Blob;
 9 
10 import org.hibernate.Hibernate;
11 
12 public class SerializableDemo implements Serializable {
13 
14     private static final long serialVersionUID = 1L;
15 
16     private Blob statistic;
17 
18     /**
19      * 把对象转换为blob类型,以便保存到数据库
20      * 
21      * @param obj
22      * @return
23      */
24     public java.sql.Blob Object2Blob(Object obj) {
25         try {
26             ByteArrayOutputStream out = new ByteArrayOutputStream();
27             ObjectOutputStream outputStream = new ObjectOutputStream(out);
28             outputStream.writeObject(obj);
29             byte[] bytes = out.toByteArray();
30             outputStream.close();
31             return Hibernate.createBlob(bytes);
32         } catch (Exception e) {
33             e.printStackTrace();
34         }
35         return null;
36     }
37 
38     /**
39      * 将blob转换为对象
40      * 
41      * @param decBlob
42      * @return
43      */
44     public Object blob2Object(java.sql.Blob decBlob) {
45         try {
46             ObjectInputStream in = new ObjectInputStream(decBlob.getBinaryStream());
47             Object obj = in.readObject();
48             in.close();
49             return obj;
50         } catch (IOException e) {
51             e.printStackTrace();
52         } catch (Exception e) {
53             e.printStackTrace();
54         }
55         return null;
56     }
57 
58     public Blob getStatistic() {
59         return statistic;
60     }
61 
62     public void setStatistic(Blob statistic) {
63         this.statistic = statistic;
64     }
65 
66 }

 

这里几个注意点

一、

在Eclipse中,提供两种方式让我们快速添加SerialVersionUid。

add default serial version ID:

add generated serial version ID:

对于第一种,需要了解哪些情况是可兼容的,哪些根本就不兼容。

第二种方式,是根据类的结构产生的hash值。增减一个属性、方法等,都可能导致这个值产生变化。

以上是关于java序列化与反序列化的主要内容,如果未能解决你的问题,请参考以下文章

Java序列化与反序列化

Java反序列化漏洞——反射与反序列化基础

Java序列化与反序列化

Java序列化与反序列化

Java序列化与反序列化

Java序列化与反序列化