Java开发中序列化与反序列化起到的作用

jopen 9年前

基本概念:
序列化是将对象状态转换为可保持或传输的格式的过程。与序列化相对的是反序列化,它将流转换为对象。这两个过程结合起来,可以轻松地存储和传输数据。


特别在网络传输中,它的作用显得尤为重要。我们可以把一个类实现序列化,然后在另一端通过反序列化可以得到该对象


例如:我们可以序列化一个对象,不过这个对象要实现序列化方法,并生成序列化号。


这是对一个对象进行序列化和反序列化的过程:

    public static byte[] serializeObj(Object object){                if (object == null) {                    throw new NullPointerException("Can't serialize null");                }                byte[] rv = null;                ByteArrayOutputStream bos = null;                ObjectOutputStream os = null;                try {                    bos = new ByteArrayOutputStream();                    os = new ObjectOutputStream(bos);                    os.writeObject(object);                    os.writeObject(null);                    os.close();                    bos.close();                    rv = bos.toByteArray();                } catch (IOException e) {                    throw new IllegalArgumentException("Non-serializable object", e);                } finally {                    try {                        if (os != null) {                            os.flush();                            os.close();                        }                        if (bos != null) {                            bos.flush();                            bos.close();                        }                    } catch (IOException e) {                        e.printStackTrace();                    }                }                return rv;            }                        @SuppressWarnings("unchecked")            public static <T>T deserializeObj(byte[] in,Class<T> clazz) {                ByteArrayInputStream bis = null;                ObjectInputStream is = null;                try {                    if (in != null) {                        bis = new ByteArrayInputStream(in);                        is = new ObjectInputStream(bis);                        while (true) {                            T o = (T) is.readObject();                            if (o == null) {                                break;                            } else {                                return o;                            }                        }                            }                } catch (IOException e) {                    e.printStackTrace();                } catch (ClassNotFoundException e) {                    e.printStackTrace();                } finally {                    try {                        if (is != null) {                            is.close();                        }                        if (bis != null) {                            bis.close();                        }                    } catch (IOException e) {                        e.printStackTrace();                    }                }                return null;            }  
下面是一个扩展(对集合的序列化和反序列化):
    public static <T>byte[] serializeList(List<T> value ,Class<T> clazz) {                if (value == null) {                    throw new NullPointerException("Can't serialize null");                }                byte[] rv = null;                ByteArrayOutputStream bos = null;                ObjectOutputStream os = null;                try {                    bos = new ByteArrayOutputStream();                    os = new ObjectOutputStream(bos);                    for (T t : value) {                        os.writeObject(t);                    }                    os.writeObject(null);                    os.close();                    bos.close();                    rv = bos.toByteArray();                } catch (IOException e) {                    throw new IllegalArgumentException("Non-serializable object", e);                } finally {                    try {                        if (os != null) {                            os.flush();                            os.close();                        }                        if (bos != null) {                            bos.flush();                            bos.close();                        }                    } catch (IOException e) {                        e.printStackTrace();                    }                }                return rv;            }                    @SuppressWarnings("unchecked")            public static <T> List<T> deserializeList(byte[] in,Class<T> clazz) {                List<T> list = new ArrayList<T>();                ByteArrayInputStream bis = null;                ObjectInputStream is = null;                try {                    if (in != null) {                        bis = new ByteArrayInputStream(in);                        is = new ObjectInputStream(bis);                        while (true) {                            T o = (T) is.readObject();                            if (o == null) {                                break;                            } else {                                list.add(o);                            }                        }                            }                } catch (IOException e) {                    e.printStackTrace();                } catch (ClassNotFoundException e) {                    e.printStackTrace();                } finally {                    try {                        if (is != null) {                            is.close();                        }                        if (bis != null) {                            bis.close();                        }                    } catch (IOException e) {                        e.printStackTrace();                    }                }  

来自:http://blog.csdn.net/u012516914/article/details/41009403