序列化与反序列化,Java实现

来源:互联网 发布:超市软件手机版 编辑:程序博客网 时间:2024/05/01 08:26
  1. public class SerializingUtil {  
  2.       
  3.     private static Log logger = LogFactory.getLog(SerializingUtil.class);  
  4.       
  5.     /** 
  6.      * 功能简述: 对实体Bean进行序列化操作. 
  7.      * @param source 待转换的实体 
  8.      * @return 转换之后的字节数组 
  9.      * @throws Exception 
  10.      */  
  11.     public static byte[] serialize(Object source) {  
  12.         ByteArrayOutputStream byteOut = null;  
  13.         ObjectOutputStream ObjOut = null;  
  14.         try {  
  15.             byteOut = new ByteArrayOutputStream();  
  16.             ObjOut = new ObjectOutputStream(byteOut);  
  17.             ObjOut.writeObject(source);  
  18.             ObjOut.flush();  
  19.         }  
  20.         catch (IOException e) {  
  21.             logger.error(source.getClass().getName()  
  22.                 + " serialized error !", e);  
  23.         }  
  24.         finally {  
  25.             try {  
  26.                 if (null != ObjOut) {  
  27.                     ObjOut.close();  
  28.                 }  
  29.             }  
  30.             catch (IOException e) {  
  31.                 ObjOut = null;  
  32.             }  
  33.         }  
  34.         return byteOut.toByteArray();  
  35.     }  
  36.       
  37.     /** 
  38.      * 功能简述: 将字节数组反序列化为实体Bean. 
  39.      * @param source 需要进行反序列化的字节数组 
  40.      * @return 反序列化后的实体Bean 
  41.      * @throws Exception 
  42.      */  
  43.     public static Object deserialize(byte[] source) {  
  44.         ObjectInputStream ObjIn = null;  
  45.         Object retVal = null;  
  46.         try {  
  47.             ByteArrayInputStream byteIn = new ByteArrayInputStream(source);  
  48.             ObjIn = new ObjectInputStream(byteIn);  
  49.             retVal = ObjIn.readObject();  
  50.         }  
  51.         catch (Exception e) {  
  52.             logger.error("deserialized error  !", e);  
  53.         }  
  54.         finally {  
  55.             try {  
  56.                 if(null != ObjIn) {  
  57.                     ObjIn.close();  
  58.                 }  
  59.             }  
  60.             catch (IOException e) {  
  61.                 ObjIn = null;  
  62.             }  
  63.         }  
  64.         return retVal;  
  65.     }  
  66. }  
  67. 注意:被序列化的对象需要继承Serializable接口,不然反序列化会失败。
0 0