这招好使,深度clone不用一个个的set考虑关系了。
public static byte[] toByteArray(Object object) throws IOException {
if (object == null) return new byte[0];
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(bos));
try {
oos.writeObject(object);
oos.flush();
return bos.toByteArray();
} finally {
bos.close();
oos.close();
}
}
public static Father fromByteArray(byte[] bytes) throws IOException, ClassNotFoundException {
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(new BufferedInputStream(new ByteArrayInputStream(bytes)));
return (Father) ois.readObject();
} finally {
try {
if (ois != null) ois.close();
} catch (IOException e) {}
}
}
public byte[] toByteArray() throws IOException {
return toByteArray(this);
}
@Override
public Father clone() throws CloneNotSupportedException {
Father model = null;
try {
model = Father.fromByteArray(this.toByteArray());
} catch (Exception e) {
throw new CloneNotSupportedException(e.getMessage());
}
return model;
}
分享到:
相关推荐
此外,序列化有一定的性能开销,因此在不需要深度克隆或者对象不包含大量数据的情况下,可能更适合使用浅克隆(`Object.clone()`)或者其他克隆策略。对于大型复杂对象,可以考虑使用更高效的库,如Apache Commons ...
实现深度克隆可以采用实现Cloneable接口并重写clone(),或者利用序列化和反序列化技术,具体选择取决于应用场景和性能需求。在实际项目中,应根据具体情况权衡效率和安全性,合理选择克隆策略。
在Java中,克隆分为两种类型:浅克隆(Shallow Clone)和深度克隆(Deep Clone)。 1. 浅克隆(Shallow Clone) 浅克隆是Java克隆机制的默认行为。当一个对象被克隆时,如果它的成员变量是基本类型(如int、double...
`clone()`的使用通常涉及到深度复制和浅复制的概念,这两者在数据结构和内存管理中扮演着关键角色。 首先,让我们理解`clone()`的基本用法。`clone()`方法创建并返回一个当前对象的副本,新创建的对象与原对象具有...
为了得到深拷贝,即完全独立的副本,你需要手动实现深度复制逻辑,例如,遍历引用类型字段并逐个复制每个元素。 总之,`clone()`方法在Java中提供了对对象复制的基本支持,尤其适用于需要创建对象副本的情况。然而...
【JavaScript对象深度Clone】 深度克隆一个对象,需要递归复制所有属性及其值。以下是一个简单的实现: ```javascript function deepClone(obj) { if (obj === null) return obj; let clone = obj instanceof ...
List的深度复制 浅谈C#中List<T>对象的深度拷贝问题
- `--depth `<n>`:限制克隆的历史深度,可以加快克隆速度,但只保留最近的n个提交。 - `--branch `<branch>`:克隆特定的分支而不是默认的主分支。 - `--single-branch`:仅克隆指定的分支,而不是所有分支。 - `--...
主要是介绍各种格式流行的软件设计模式,对于程序员的进一步提升起推进作用,有时间可以随便翻翻~~ 23种设计模式汇集 如果你还不了解设计模式是什么的话? 那就先看设计模式引言 ! 学习 GoF 设计模式的重要性 ...
go-clone:深度克隆任何Go数据 包clone提供了对任何Go数据进行深度克隆的功能。 它还提供了一个包装器,以保护指针免受任何意外的突变。 Clone / Slowly可以克隆任何结构的未导出字段。 明智地使用此功能。 安装 ...
"clone-voice.zip" 是一个压缩包文件,很可能包含了与语音克隆技术相关的代码或工具。根据提供的标签 "python",我们可以推测这个项目是使用Python编程语言实现的。Python在处理音频数据和人工智能领域有着广泛的...
JavaScript对象的深度Clone 实现对象的深度克隆通常可以使用递归函数或者JSON序列化/反序列化的方式: ```javascript function deepClone(obj) { if (typeof obj !== 'object' || obj === null) { return obj; ...
综上所述,“Realtime-Voice-Clone-Chinese.zip”所代表的实时中文语音克隆模型是人工智能领域的一个重要突破,它不仅展示了深度学习在语音处理中的强大能力,也为未来的创新应用开辟了新的道路。随着技术的进一步...
在语音克隆中,这种模型通常是基于深度学习的神经网络,例如 Tacotron 或 WaveNet。这些模型已经在大量的语音数据上进行了训练,学会了将文本转化为自然的语音。预训练模型可以作为基础,通过进一步的微调以适应特定...
- **深度克隆**:不仅复制对象本身,还递归地复制它引用的对象,确保新创建的对象和原始对象及其所引用的对象都完全独立。 3. **版本控制系统中的克隆** 在版本控制软件(如Git)中,克隆指的是获取远程仓库的...
在`clone()`方法中调用了`super.clone()`和`homeAddr.clone()`,确保了深度克隆。 ##### 3.2 使用序列化与反序列化 这种方法利用Java的序列化机制实现深度克隆。具体步骤如下: 1. **实现Serializable接口**:...
$ npm install clone-json --save # Install with yarn $ yarn add clone-json 用法 两个数组相等 let cloneJson = require ( 'clone-json' ) let json = { a : 123 , b : 'str' , c : true , d : [ 1 , '2' , ...
基于的深度克隆,在处理大对象时比传统的克隆实现效率更高。 需要节点6或更高版本。 注意:这不是传统的clone()。 对源对象的更改将反映在克隆中,但是对克隆的更改不会修改源。 表现 根据对象大小的不同, ...