通过序列化复制整个对象

用到的所有的类都要实现Serializable接口

public class Address implements Serializable{

    /**
     *
     */
    private static final long serialVersionUID = 1L;
    private String state;
    private String province;
    private String city;
    public Address(String s,String p,String c){
        this.state = s;
        this.province = p;
        this.city = c;
    }

    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("地区:"+state+"\n");
        sb.append("省份:"+province+"\n");
        sb.append("城市:"+city+"\n");
        return sb.toString();
    }

    /**
     * @return the state
     */
    public String getState() {
        return state;
    }

    /**
     * @param state the state to set
     */
    public void setState(String state) {
        this.state = state;
    }

    /**
     * @return the province
     */
    public String getProvince() {
        return province;
    }

    /**
     * @param province the province to set
     */
    public void setProvince(String province) {
        this.province = province;
    }

    /**
     * @return the city
     */
    public String getCity() {
        return city;
    }

    /**
     * @param city the city to set
     */
    public void setCity(String city) {
        this.city = city;
    }

}
public class Employee implements Serializable{

    private String name;
    private int age;
    private Address address;
    public Employee(String n,int a,Address ad){
        this.name = n;
        this.age = a;
        this.address = ad;

    }
    /**
     * @return the name
     */
    public String getName() {
        return name;
    }
    /**
     * @param name the name to set
     */
    public void setName(String name) {
        this.name = name;
    }
    /**
     * @return the age
     */
    public int getAge() {
        return age;
    }
    /**
     * @param age the age to set
     */
    public void setAge(int age) {
        this.age = age;
    }
    /**
     * @return the address
     */
    public Address getAddress() {
        return address;
    }
    /**
     * @param address the address to set
     */
    public void setAddress(Address address) {
        this.address = address;
    }
    /* (non-Javadoc)
     * @see java.lang.Object#toString()
     */
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        sb.append("姓名:"+name);
        sb.append("年龄:"+age);
        sb.append("地址:"+"\n"+address+"\n");
        return sb.toString();
    }

}

复制整个对象

    public static void main(String[] args) {
        System.out.println("序列化前");
        Address address = new Address("中国","吉林","长春");
        Employee employee1 = new Employee("张XX",30,address);
        System.out.println(employee1);
        System.out.println("序列化后:");
        ObjectOutputStream out = null;
        ObjectInputStream  in = null;
        Employee employee2 = null;
        try {
            out = new ObjectOutputStream(new FileOutputStream("emploooo.dat"));
            out.writeObject(employee1);
            in = new ObjectInputStream(new FileInputStream("emploooo.dat"));
            employee2 = (Employee)in.readObject();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }catch (IOException e) {
            e.printStackTrace();
        }catch (ClassNotFoundException e) {
            e.printStackTrace();
        }finally{
            //toDo释放资源
        }
        System.out.println(employee2);

    }
}

时间: 2024-10-05 23:37:09

通过序列化复制整个对象的相关文章

在使用Linq to SQL并序列化一个数据对象的时候报System.InvalidOperationException异常,序列化类型XXX的对象时检测到循环引用。

在使用Linq to SQL并序列化一个数据对象的时候报System.InvalidOperationException异常,序列化类型 的对象时检测到循环引用. 异常信息(部分): System.Web.Services.Protocols.SoapException: 服务器无法处理请求. ---> System.InvalidOperationException: 生成 XML 文档时出错. ---> System.InvalidOperationException: 序列化类型 Web

java序列化之后,对象的引用关系?

今天写代码的时候用到序列化,不过突然想到这个问题. 于是写了一些测试代码,得出两个结论. 如果两个对象存在引用关系,比如A引用B. 如果两个对象是各自序列化的,则引用关系不再存在. 如果两个对象是是另一个类对象C的成员,序列化C,反序列化C之后,A和B的引用关系还存在. 我就是做了这个两个实验. 1 node2引用了node1,node2.parent=node1, 序列化和反序列化之后, 发现node2.parent !=node1. node2.parent 指向的内存跟node1不同,而是

C#序列化多个对象到单个文件

特定的情况下,可能需要将多个对象保存到文件中.在网上找了一阵,没发现专门说这个问题的.在博问看到了一个相关的问题和回答,整理了一下.以下是我的一个简单实现: //测试用于保存的类 [Serializable] class TestToSerizable { int i; string b; public TestToSerizable(int i, string b) { this.i = i; this.b = b; } } class Program { static void Main(s

[转]AS3复制可视对象

一,复制舞台上的影片剪 方法1——反射方法: var ClassRef:Class = getDefinitionByName(getQualifiedClassName(t_mc)) as Class; var clone_mc:DisplayObject = new ClassRef(); addChild(clone_mc); 方法2——构造器方法: var ClassRef:Class = t_mc.constructor; var clone_mc:MovieClip = new Cl

设计模式之原型模式——复制建立对象实例

有一段时间没看书了,之前去参加了一个省上的比赛,马马虎虎吧--得了一个二等奖.不过感觉现在的比赛都有点水啊~哎,废话不多说,切入正题. 当我们在建立一些对象实例时,通常会使用new 关键字来进行实例化. 但有时候不靠指定类名的方式就能产生对象实例,此时不使用类来建立对象实例,而是复制对象实例另建一个新的对象实例. 通常这种需求发生在以下几种情况: 种类过多不方便整理成类时 不容易利用类产生对象实例时 希望把框架和所产生的对象示例分开时 下面我们用一个例子来看看. 需要创建五个JAVA文件: Pr

超简易复制Model对象(为后续备忘录设计模式博文做铺垫)

复制整个Model需要实现NSCopy协议,可以想象是非常麻烦的一件事情,今天我跟大家分享一个不需要你做任何操作的复制Model对象的方法,不过,首先你得先去下载开源代码FastCoder辅助才行. 源码如下: NSObject+ObjectCopy.h 与 NSObject+ObjectCopy.m // // NSObject+ObjectCopy.h // FastCoder // // Created by YouXianMing on 15/1/3. // Copyright (c)

Android中SharedPreferences和序列化结合保存对象数据

前言: 最近在做用户注册的时候,遇到了需要填写很多表单数据,不可能在一页把所有的数据都展示完全,因此采用了分页的方式,由于在用户填写数据数据之后我们需要对用户填写的数据进行暂时的记录的,当用户会到此页时,还能查看和修改.刚开始解决这个问题我们一定会从数据的大小的角度来解决,于是就有以下几种方式: A.运用临时静态变量static来保存到内存中                               B.运用SharedPreferences来保存                       

利用ObjectInputStream、ObjectOutputStream序列化多个对象

内容:序列化多个对象,利用一个容器存储你要序列化的多个对象. class Student implements java.io.Serializable{ private String name; public Student(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } } pub

jQuery实现form表单序列化转换为json对象功能示例

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>jquery form序列化转换为json对象</title> <script src="//cdn.bootcss.com/jquery/3.0.0/jquery.min.js"></script> </script> </hea