Java对象的序列化方式克隆

来源:互联网 发布:flashplayer mac 编辑:程序博客网 时间:2024/06/04 17:53

简述:

用字节流的方式,复制Java对象


代码:

流克隆复制函数

    public static Object deepClone(Object obj){        if(obj == null){            return null;        }        try {            ByteArrayOutputStream byteOut = new ByteArrayOutputStream();            Object cloneObj = null;            ObjectOutputStream out = new ObjectOutputStream(byteOut);            out.writeObject(obj);            ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());            ObjectInputStream in = new ObjectInputStream(byteIn);            cloneObj = in.readObject();            return cloneObj;        } catch (Exception e) {            throw new RuntimeException(e);        }    }


ObjectClone.java

package test;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;public class ObjectClone {    /**     * 测试对象     */    private static class Person implements Serializable {        private String name;        private int age;        Person(String name, int age){            this.name = name;            this.age = age;        }        @Override        public String toString() {            return String.format("name: %s\nage: %s", name, age);        }    }        /**     * 测试函数     */    public static void main(String[] args) {        Person person = new Person("Henry", 22);        Person newPerson = (Person)ObjectClone.deepClone(person);        System.out.println(newPerson);    }        /**     * 工具类     *      * @param obj     * @return     */    public static Object deepClone(Object obj){        if(obj == null){            return null;        }        try {            ByteArrayOutputStream byteOut = new ByteArrayOutputStream();            Object cloneObj = null;            ObjectOutputStream out = new ObjectOutputStream(byteOut);            out.writeObject(obj);            ByteArrayInputStream byteIn = new ByteArrayInputStream(byteOut.toByteArray());            ObjectInputStream in = new ObjectInputStream(byteIn);            cloneObj = in.readObject();            return cloneObj;        } catch (Exception e) {            throw new RuntimeException(e);        }    }}


测试结果:










0 0
原创粉丝点击