Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/216.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用序列化克隆Android对象_Android_Serialization_Clone - Fatal编程技术网

使用序列化克隆Android对象

使用序列化克隆Android对象,android,serialization,clone,Android,Serialization,Clone,我需要克隆我创建的对象(自定义类)。 使用标准object.clone克隆它会很麻烦,因为它包含对其他对象的引用,并且需要我也克隆这些对象 我读到克隆它的一种方法是序列化对象,然后反序列化它 这是个好主意吗?您需要注意序列化会增加开销,与直接克隆相比,这是一个巨大的开销。您还必须确保类的每个成员(以及每个字段的每个成员,…)都需要可序列化。我更喜欢添加一个适当的clone()实现 通常,序列化用于将对象发送到某个地方(文件中或通过网络),以便其他人稍后可以重建它们。但是你可以滥用它来立即重建对象

我需要克隆我创建的对象(自定义类)。 使用标准object.clone克隆它会很麻烦,因为它包含对其他对象的引用,并且需要我也克隆这些对象

我读到克隆它的一种方法是序列化对象,然后反序列化它


这是个好主意吗?

您需要注意序列化会增加开销,与直接克隆相比,这是一个巨大的开销。您还必须确保类的每个成员(以及每个字段的每个成员,…)都需要可序列化。我更喜欢添加一个适当的clone()实现

通常,序列化用于将对象发送到某个地方(文件中或通过网络),以便其他人稍后可以重建它们。但是你可以滥用它来立即重建对象。如果对象是可序列化的,那么重构应该是一个忠实的副本

但这项技术不能轻易使用。首先,序列化是非常昂贵的。它很容易比clone()方法贵一百倍。其次,并非所有对象都是可序列化的。第三,使类可序列化是一件棘手的事情,并不是所有的类都可以依靠它来实现。(不过,您可以假设系统类是正确的。)因此我认为这不是一个好主意。

您写道:

使用标准克隆它 object.clone会很混乱,因为它 包括对其他对象的引用 这就需要我克隆这些 也是

当您通过序列化进行克隆时,您可以

  • 还需要序列化这些其他对象(否则生成的对象不是真正的克隆)
  • 接受克隆将是部分的(没有引用的对象)
在后一种情况下,您只需实现一个将其他对象排除在外的
clone()
方法


除了序列化的成本之外,为了保存,TANSTAAFL

我的对象已经被定义为可序列化的。我们谈论的是什么样的开销?我的程序是一个游戏,每次程序移动时都需要执行一次克隆。帮助我在数据上运行“假设”场景。实现Serializable的一个主要成本是,它降低了在类发布后更改其实现的灵活性。当类实现Serializable时,其字节流编码(或序列化形式)将成为其导出API的一部分。一旦广泛分发一个类,通常需要永远支持序列化表单,就像需要支持导出API的所有其他部分一样。实现Serializable的第二个成本是它增加了出现错误和安全漏洞的可能性。通常,使用构造函数创建对象;序列化是一种用于创建对象的语言外机制。它还增加了与发布新版本类相关的测试负担。修订可序列化类时,检查是否可以在新版本中序列化实例,在旧版本中反序列化实例,反之亦然。我将立即序列化和反序列化以创建副本。我没有从一个版本延续到下一个版本,因为它都在同一个运行中。