使用反序列化实现深克隆

public class ByteArrayOutputStreamextends OutputStream

此类实现了一个输出流,其中的数据被写入一个 byte 数组。缓冲区会随着数据的不断写入而自动增长。

可使用 toByteArray()toString() 获取数据。

关闭 ByteArrayOutputStream 无效。此类中的方法在关闭此流后仍可被调用,而不会产生任何 IOException

时间: 2024-10-19 22:09:29

使用反序列化实现深克隆的相关文章

设计模式之原型模式prototype

1.原型模式的使用和本质.以及优势: a.通过 new 产生一个对象需要非常繁琐的数据准备或者访问权限,则可以使用原型模式. b.原型模式的使用就是 java 中的克隆技术,以某个对象为原型,复制出新的对象.显然,新的对象具备原型对象的特点. c.其优势有:效率高(直接克隆,避免了重新执行构造过程步骤). d.克隆类似于 new, 但是不同于 new .new 创建新的对象属性采用的是默认值.克隆出的对象的属性值完全和原型对象相同.并且克隆出来的新对象改变不会影响原型对象.(可以对克隆对象修改属

Java原型模式之浅拷贝-深拷贝

一.是什么? 浅拷贝:对值类型的成员变量进行值的复制,对引用类型的成员变量仅仅复制引用,不复制引用的对象 深拷贝:对值类型的成员变量进行值的复制,对引用类型的成员变量也进行引用对象的复制 内部机制: (1)关于Object类的clone方法 默认实现为"浅拷贝",重写Object类中的clone方法.Java中全部类的父类都是Object类,Object类中有一个clone方法.作用是返回对象的一个拷贝,可是其作用域是protected类型的,一般的类无法调用,因此Prototype类

原型模式(Prototype)

?一.原型模式介绍 原型模式:原型模式就是从一个对象再创建另外一个可定制的对象,而且不需要知道任何创建的细节. 所谓原型模式,就是java中的克隆技术,以某个对象为原型.复制出新的对象.显然新的对象具备原型对象的特点.效率高(避免了重新执行构造过程步骤) 克隆类似于new,但和new不同.new创建新的对象属性采用的是默认值.克隆出来的对象的属性值完全和原型对象相同.并且克隆出的新对象不会影响原型对象,克隆后.还可以再修改克隆对象的值. 要实现原型模式,必须实现Cloneable接口,而这个接口

设计模式(五)---- 原型模式

原型模式 通过 new 产生一个对象需要非常繁琐的数据准备或访问权限,则可以使用原型模式.就是 java 中的克隆技术,以某个对象为原型,复制出新的对象.显然,新的对象具备原型对象的特点. 优势:创建对象效率高(直接克隆,避免重新执行构造过程步骤) 克隆类似于 new 但是不同于 new.new 创建新的对象,属性采用默认值:克隆的对象属性值和原型对象相同.并且克隆出的新对象改变不会影响到原型对象.然后,再修改克隆对象的值. 原型模式实现 实现 Cloneable 接口,重写 clone 方法:

c#:浅克隆和深克隆,序列化和反序列化

一.浅克隆和深克隆(浅复制和深复制)浅克隆和深克隆最典型的应用是数据集对象DataSet的Clone和Copy方法.Clone()方法用来复制DataSet的结构,但是不复制DataSet的数据,实现了浅复制.Copy()方法不但复制结构,也复制数据,实现了深复制.另外:我们熟知的Object对象有一个MemberwiseClone()方法,它实现的就是浅表复制.该方法不是虚拟的,所以不能重写它的实现代码.1.浅克隆:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然

java (31) - 序列化实现深克隆

一.序列化:    把对象写到流里面的过程是序列化,而把对象从流中读出来的过程叫做反序列化.在java中实现深克隆对象,常常可以先使对象实现Serializable接口,然后把对象写到一个流里面,然后再从流中读取出来,便可以重建对象. 二.序列化实现: <strong><span style="font-size:14px;">public class Main { public static void main(String[] args) throws Ex

Java深拷贝和浅拷贝(深克隆和浅克隆)

Java中创建对象有两种方式: 通过new操作符创建一个对象 通过clone方法来复制一个对象 使用反序列化来创建一个对象 通过使用Class类的newInstance方法来创建一个对象 使用Constructor类的newInstance方法来创建一个对象 第一种方法,通过new操作符来创建一个对象,分配内存,调用构造函数来填充各个域,这是我们最熟悉的:第二种clone也是分配内存,分配的内存和被clone对象相同,然后再使用原对象中对应的各个域,填充新对象的域, 填充完成之后,clone方法

Java中的深克隆和浅克隆

为什么要克隆 首先思考一个问题, 为什么需要克隆对象? 直接new一个对象不行吗? 克隆的对象可能包含一些已经修改过的属性, 而new出来的对象的属性都还是初始化时候的值, 所以当需要一个新的对象来保存当前对象的"状态"时就要靠克隆了. 当然, 把对象的属性一个一个的赋值给新new的对象也是可以的, 但是这样一来麻烦不说, 二来, 我们通过源码查看 Object的clone方法是一个native方法(native方法是非Java语言实现的代码, 供Java程序调用, 要想访问比较底层的

C#中XML与对象之间的序列化、反序列化

using System; using System.IO; using System.Text; using System.Xml; using System.Xml.Serialization; namespace Xml.Utility { public static class XmlUtil { /// <summary> /// 将一个对象序列化为XML字符串 /// </summary> /// <param name="o">要序列化