用序列化实现 深copy

利用序列化和反序列化实现深拷贝 在上面的示例中,MyClass实现了接口,通过deepCopy()方法实现了深拷贝。在deepCopy()方法中,首先将原始对象序列化为字节流,然后从字节流中反序列化出一个新的对象,从而完成了深拷贝。 阅读详情

/*用序列化实现 深copy
*注意事项
*1.必须带有不带参数的公共构造函数
*2.如果包含集合,那么集合必须是强制类型类型
*3.集合必须有与类型一致的默认属性
*4.集合必须有与类型一致的Add方法
*5.需要序列化的对象不能循环引用
*/
using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;

namespace ConsoleApplication1
{

    [Serializable]
    public abstract class Animal
    {
        public int i;
        public double d;
        public byte b;
        public string[] s;
        public abstract Animal Clone();
        public abstract Animal CreateDeepCopy();
    }

    [Serializable]
    public class Dog : Animal
    {
        public Dog(int i, double d, byte b,string s1,string s2)
        {
            this.i = i;
            this.d = d;
            this.b = b;
            string[] ms={s1,s2};
            this.s=ms;
        }
        public override Animal Clone()
        {
            return (Animal)this.MemberwiseClone();
        }
        //实现深拷贝

        public override Animal CreateDeepCopy()
        {
            Animal animal;
            MemoryStream memoryStream = new MemoryStream();
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(memoryStream, this);
            memoryStream.Position = 0;
            //反序列化
            animal = (Animal)formatter.Deserialize(memoryStream);
            return animal;
        }

    }

    public class App
    {
        public static void Main()
        {
            Animal a1 = new Dog(1, 2, 3,"A","B");
            System.Console.WriteLine("Animal a1 's members : i={0} d= {1} b={2} s1={3} s2={4}", a1.i, a1.d, a1.b,a1.s[0],a1.s[1]);
            Animal a2;
            //a2 = a1.Clone();
            a2 = a1.CreateDeepCopy();

            System.Console.WriteLine("Animal a2 's members : i={0} d= {1} b={2}s1={3} s2={4}", a2.i, a2.d, a2.b, a2.s[0], a2.s[1]);

            System.Console.ReadLine();

            System.Console.WriteLine("do a1.i = 9;a1.s[0] = C");
            a1.i = 9; a1.s[0] = "C";
            System.Console.WriteLine("Animal a1 's members : i={0} d= {1} b={2}s1={3} s2={4}", a1.i, a1.d, a1.b, a1.s[0], a1.s[1]);
            System.Console.WriteLine("Animal a2 's members : i={0} d= {1} b={2}s1={3} s2={4}", a2.i, a2.d, a2.b, a2.s[0], a2.s[1]);

            System.Console.WriteLine("do a2.i = 8;a2.s[1] =D");
            a2.i = 8; a2.s[1] = "D";
            System.Console.WriteLine("Animal a1 's members : i={0} d= {1} b={2}s1={3} s2={4}", a1.i, a1.d, a1.b, a1.s[0], a1.s[1]);
            System.Console.WriteLine("Animal a2 's members : i={0} d= {1} b={2}s1={3} s2={4}", a2.i, a2.d, a2.b, a2.s[0], a2.s[1]);
            System.Console.ReadLine();
        }
    }
}

Xilinx Vitis HLS教程1--Vitis HLS概述[01/12] Xilinx Vitis HLS教程[01/10]前言1. Vitis HLS简介1.1 软件工程师的设计原则1.1.1 简介1.1.2 吞吐量和性能1.2.3 架构问题1.2.4 FPGA编程的3大范式1.2.4.1 生产者-消费者范式1.2.4.2 流式数据范式1.2.4.3 流水线范式1.2.5 3种范式结合 前言 项目中使用到Xilinx Zynq UltraScale+ MPSoC ZCU102 开发板,领导指示研究"xilinx软件自带的c语言综合器"。对于一个硬件一窍不通的我来说,甚至不知道 阅读详情

相关推荐

Doris副本修复实战:从状态机到手动修复的完整指南

在分布式数据库系统中,多副本机制是实现高可用与数据一致性的核心技术。其原理是通过在不同节点存储数据的多个拷贝,确保部分节点故障时服务仍可继续。这项技术的核心价值在于保障数据可靠性,并支撑在线分析处理(OLAP)等对数据一致性要求高的应用场景。当副本出现损坏、丢失或版本不一致时,系统通常依赖自动修复机制,但在元数据损坏、多副本同时故障等复杂场景下,自动修复可能失效,需要深入理解副本状态机并借助手动工具介入。本文将聚焦Doris数据库,解析Tablet副本状态流转(如BAD、VERSION_ERROR),并详细

weixin_32288959的博客 461

对象copy的两种方式--序列化--clone

对象实现copy有多中方式,最土的方法就是直接new,然后塞值,不过这种方法是真的low,下面着重说说Object类中的clone() 和 序列化反序列化copy Object 中 clone的方法 1.Object中clone 方法是protected,虽然所有类都继承自object 但是在不同包下调用还是不被允许的,因此要重写clone方法。 2.调用clone方法clo...

ancaofumuhu9385的博客 405

3D Slicer + MONAI Bundle实战:如何用Wholebrainseg模型快速分割133个脑区(附避坑指南)

本文详细介绍了如何利用MONAI Model Zoo中的Wholebrainseg模型,在3D Slicer环境中高效分割133个脑区。文章重点提供了数据预处理、GPU推理加速及结果精修等实战技巧与避坑指南,旨在帮助医学影像研究者和开发者提升全脑分割的精度与效率。

311

使用序列化实现对象的拷贝

使用序列化实现对象的拷贝至少有三种方法: 1、使用引用  2、基本类型的拷贝 3、对象类型级别的拷贝 1、使用引用 使用对象引用来构建实例化对象,实际上只是引用上的别名,所有对象的地址只有一个。其中一个对象的属性改变,其它的对象的属性也改变了 Email类: public class Email implements Serializable { private String tit...

mengtianqq的博客 306

实体对齐(Entity Alignment)相关论文与数据集整理

实体对齐(Entity Alignment)、知识图谱融合方法总结整理 年份 模型 主要思想 博文推荐 论文 代码 2019 Entity Alignment between Knowledge Graphs Using Attribute Embeddings 实体对齐数据集整理 名称 — DBpe-dia(DBP) LinkedGeoData(LGD) Geonames(GEO) YAGO ...

bjxxkjdxcdd的博客 1万+

探秘RK3588:OverlayFS挂载与固件升级全攻略

本文围绕RK3588芯片的OverlayFS文件系统挂载与固件升级技术展开详细阐述。首先介绍了RK3588芯片的卓越性能及其在嵌入式领域的广泛应用,重点分析了OverlayFS文件系统的分层架构原理及其在RK3588设备上的挂载方法,包括详细的挂载步骤、常见问题解决方案。随后详细阐述了RK3588设备在Windows和Linux环境下的固件升级方案,涵盖升级准备、具体操作流程及故障处理等内容。最后通过智能安防监控设备的实际案例,展示了OverlayFS挂载与固件升级技术的应用效果。文章为嵌入式开发者提供了全

远程部署调试 运行安装 项目调试 二次开发 项目技术新 持续迭代 部分源码免费分享 286

使用序列化实现对象深拷贝

实现树节点的深拷贝 [code="java"] public DefaultMutableTreeNode deepCopy(DefaultMutableTreeNode node) { DefaultMutableTreeNode cloneNode = null; try { ByteArrayOutputStream ...

iteye_10076的博客 150

使用Qt编译Qt WebEngine

这就是使用Qt编译Qt WebEngine模块的基本步骤。通过按照上述步骤,您应该能够成功编译和使用Qt WebEngine来嵌入Web内容到您的Qt应用程序中。Qt WebEngine是Qt框架的一个模块,它提供了一个现代的Web浏览器引擎,可以在Qt应用程序中嵌入Web内容。首先,需要获取Qt的源代码。如果尚未安装,可以从Qt官方网站下载并安装Qt。完成Qt的安装后,您可以构建并运行Qt WebEngine示例来验证编译是否成功。这将把编译好的Qt库文件和头文件安装到之前指定的安装目录中。

DevForge的博客 3017

利用序列化实现对象的拷贝

https://www.cnblogs.com/chenssy/p/3382979.html 如何利用序列化来完成对象的拷贝呢?在内存中通过字节流的拷贝是比较容易实现对象拷贝的。把母对象写入到一个字节流中,再从字节流中将其读出来,这样就可以创建一个新的对象了,并且该新对象与母对象之间并不存在引用共享的问题,真正实现对象的深拷贝。 public class CloneUtils { @Sup...

try to do 308

双目相机模型

近期想研究一下 双目相机 的内容,故先把 理论 弄清楚! 一、双目相机模型 针孔相机模型描述了 单个相机 的成像模型。然而,仅根据一个像素,我们是无法确定 这个空间点的具体位置的。这是因为,从相机光心到归一化平面连线上的所有点,都可以 投影至该像素上。只有当 P 的深度确定时(比如通过双目或 RGB-D 相机),我们才能确 切地知道它的空间位置。 测量像素距离(或深度)的方式有很多种,像人眼就可以根据左右眼看到的景物差异 (或称视差)来判断物体与我们的距离。双目相机的原理亦是如..

努力努力努力 2408

SAP PFCG 中的单一角色与复合角色

在 SAP 系统的安全与授权管理中,事务码 PFCG(角色维护)扮演着关键角色。理解单一角色(Single Role)和复合角色(Composite Role)的概念,对于有效地管理用户权限至关重要。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1478

java序列化实现深拷贝_利用序列化实现深拷贝

利用序列化实现深拷贝2012/9/8 11:52:12 程言方 程序员俱乐部 我要评论(0)摘要:本文是借鉴的一位前辈的总结,重新编辑一下收藏了.首先看看浅拷贝和深拷贝的定义浅拷贝:只复制一个对象,对象内部存在的指向其他对象数组或者引用则不复制深拷贝:对象,对象内部的引用均复制为了更好的理解它们的区别我们假设有一个对象A,它包含有2对象对象A1和对象A2对象A进行浅拷贝后,得到对象B但是对象...

weixin_42098892的博客 377

大模型之Spring AI实战系列(二十一):Spring AI + MCP + 本地文件系统实战指南

在上一篇文章中,我们学习了如何使用 Spring AI 集成 Model Context Protocol (MCP),并通过 Brave Search 实现了互联网搜索能力的接入。本文将继续深入 Spring AI 的 MCP 实战能力,介绍如何将 **本地文件系统** 封装为 LLM 可调用的工具

寻道AI,探索AI无限可能! 2519

java编程经验_Java编程经验汇总

JDK和JRE大家肯定在安装JDK的时候会有选择是否安装单独的jre,一般都会一起安装,我也建议大家这样做。因为这样更能帮助大家弄清楚它们的区别:Jre 是java runtime environment, 是java程序的运行环境。既然是运行,当然要包含jvm,也就是大家熟悉的虚拟机啦, 还有所有java类库的class文件,都在lib目录下打包成了jar。大家可以自己验证。至于在windows...

weixin_36289742的博客 172

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

深copy

AddressClone address = new AddressClone("小区1", "小区2");UserClone user = new UserClone("小李", address);user.getAddress().setAddress1("小区3");

hxb_hexiaobo的博客 486

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Kotlin对象的深/浅copy

Kotlin实现对象复制主要有以下几种方式: 推荐使用data class的copy()方法实现浅拷贝,也可通过copy(field=newVal)修改部分字段 对于深拷贝,需要手动复制嵌套对象,如user.copy(address=address.copy()) 非data class可自定义copy()或deepCopy()方法 不推荐使用Java的Cloneable接口 复杂对象可使用序列化实现深拷贝,但性能较差 集合类型需要注意容器和元素的深拷贝问题 最佳实践是优先使用data class的copy

Zhang Phil 259

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Java 浅copy 和深copy

Java 浅copy 和深copy1. 前言2. 现象解析3. 编辑反射方法类 1. 前言 为什么要写这个文章是在于,今天翻到之前写到文章copy问题的时候没有解析原理,在这里补上。现象可以查看之前文章Java Bean Copy问题,可以从这个问题进而引发深copy和浅copy的问题。 2. 现象解析 我们知道Java虚拟机的内存结构包括虚拟机栈,本地方法栈,堆,方法区,计数器等。而创建对象所需要的是虚拟机栈,堆和方法区。 2.1 对象创建 当创建对象的时候会在堆中存放具体的数据和指向方法区中类型数据的

燃尽余火的博客 321

【Python】copy库的介绍及用法

如果对象包含嵌套的可变对象(如列表、字典等),浅拷贝只会复制上层对象的引用,而嵌套的可变对象仍然指向原始对象中的相同对象。浅拷贝适用于只需要复制顶层对象的情况,而深拷贝则适用于需要彻底复制所有嵌套对象的情况。用于创建对象的浅拷贝。深拷贝递归地复制对象及其所有子对象,确保新对象与原对象完全独立,即使嵌套对象也会被复制。从上面的例子可以看出,深拷贝会完全复制所有嵌套对象,即使修改深拷贝中的嵌套对象也不会影响原始对象。从上面的例子可以看出,浅拷贝会共享嵌套对象,即修改浅拷贝中的嵌套对象会影响原始对象。

qq_53871375的博客 4079

如何实现对象的深copy?

咨询区 NakedBrunch:我的项目中有一个对象copy的需求,比如下面这段代码: MyObjectmyObj=GetMyObj();//Createandfilla...

dotNET跨平台 216

java 深copy

public static<T> T deepClone(T src) throws IOException, ClassNotFoundException { Object obj = null; ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream...

weixin_30687587的博客 138

对象深copy

最近使用Map及HashMap的putAll进行对象copy的时候,方向如果value是个对象的时候,还是浅copy,于是乎就上网搜了搜如何深copy,下面是方法之一: public static Object deepClone(Object obj) { try { // 将对象写到流里 ByteArrayOutputStream bo = new ByteArrayOutputSt...

u011614717的博客 210

终极指南:如何用Fast Copy实现JavaScript对象的快速深度复制

在JavaScript开发中,对象复制是一个常见但容易出错的场景。**Fast Copy**作为一款专为JavaScript设计的快速深度复制库,能够轻松解决复杂对象的复制难题。无论是数组、Map、Set,还是自定义构造函数,Fast Copy都能提供卓越的性能表现。 ## 🚀 为什么需要Fast Copy? 传统的JavaScript对象复制方法存在诸多局限性: - `Object.ass

gitblog_00053的博客 744

java如何快速实现深copy

1、对应的object实现Serializablepublic class BaseDO implements Serializable { private static final long serialVersionUID = 4976398103651159073L; public String toString() { return ToStringBuilder

kay_zhyu的专栏 638

c# 序列化

定义: 序列化是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入临时或持久存储区。以后,可以通过从存储区中读取或反序列化对象的状态,从新创建该对象。 ...

磨刀不误砍柴工 6633

ArrayList的深度copy和浅度拷贝

arrayList的深度拷贝 两种方式 1、序列化对象然后进行拷贝 2、通过Collections.copy方法实现深度拷贝 ArrayList.clone对浅度拷贝 ArrayList.addAll()方法也是浅度拷贝 、               /*对对象进行深度拷贝*/                 ArrayLis

清风徐来,水波不兴 7961

List深度Copy-序列化

public List deepCopy(List src) throws IOException, ClassNotFoundException{             ByteArrayOutputStream byteOut = new ByteArrayOutputStream();             ObjectOutputStream out = new ObjectOut

逗逼程序员的成长之路 355
上一篇: Windows系统中如何释放C盘空间
下一篇: 去掉Dblookupeh控件的自己填充功能
Open2ye
博客等级 码龄23年 6粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值