今天碰到一个奇怪的问题。一个IList<Order> ordersList2集合,然后我Remove里面的一条特定数据,调试集合里面的数据确实有一条与特定数据相匹配,但就是Remove不掉。琢磨了许久,突然想到.NET里面的序列化和反序列化可以到达对象克隆的效果,一下豁然开朗。 ordersList2集合是通过集合变量ordersList1赋值后用ViewState保存的一个集合,换言之,ordersList2是经过序列化了的数据。现在我从ordersList1中取部分数据ordersList3集合,然后将这个ordersList3集合从ordersList2中删除,最初我想通过ordersList2.Contain(order)和ordersList2.Remove(order)对里面的项进行删除,发现根本没用,现在原因已经很清楚了,首先明白这里Contain和Remove是通过引用判定的,但是这里因为ordersList2经过了序列化,与ordersList1和ordersList3已经完全没有了引用关系,所以Contain始终会返回false,也不会Remove掉任何项。
转自:http://hi.baidu.com/%B7%DC%B6%B7%B2%BB%CD%A3%D0%AA/blog/item/bf7b0926fa4ebe24d40742b0.html
|
分享到:
相关推荐
在Java编程语言中,克隆和序列化是两个重要的概念,它们在数据处理和对象管理中扮演着关键角色。下面将分别对这两个概念进行详细解释,并结合实例和源代码进行阐述。 **一、克隆** 1. **克隆定义**:克隆是指创建...
序列化是将对象转换为字节流的过程,而反序列化是将字节流转换回对象的过程。 在 Java 中,序列化和反序列化是通过实现 Serializable 接口来实现的。Serializable 接口是一个标记接口,不包含任何方法,但它告诉 ...
6. **深拷贝与浅拷贝**:在序列化过程中,对象的引用会被复制,可能导致浅拷贝。如果需要完全独立的副本(深拷贝),则需要额外处理。 7. **自定义序列化和反序列化**:通过实现`writeObject()`和`readObject()`方法...
序列化涉及将对象转换为字节流,而克隆是直接创建一个与原对象具有相同属性的新对象,通常通过实现`Cloneable`接口并覆盖`clone()`方法来实现。 9. **序列化框架** 除了Java内置的序列化机制,还有许多第三方框架...
在反序列化时,JVM会读取对象类型和版本信息,并根据这些信息生成对象实例,然后将字节流中的数据复制到对象的数据成员中。 在使用Java序列化机制时,有几个注意事项: a) 序列化对象时,需要确保对象类及其成员...
深克隆通过序列化和反序列化实现,首先将对象写入`ByteArrayOutputStream`,然后从`ByteArrayInputStream`中读取,从而创建一个新的对象。这种方式可以确保对象及其引用的所有对象都被复制,形成一个新的独立的实例...
在C++编程中,CArchive类是MFC(Microsoft Foundation Classes)库中的一个重要组件,它提供了对象的序列化和反序列化功能。序列化是指将内存中的数据结构或对象转换为可以存储或传输的格式,而反序列化则是将这种...
在Java应用程序中,我们经常需要将Java对象转换为JSON字符串(序列化)或从JSON字符串恢复Java对象(反序列化),Jackson库就是完成这一任务的理想选择。 Jackson库由三个主要模块组成: 1. **jackson-databind**...
这里需要注意的是,由于`TreeNode.Tag`可能包含不可序列化的对象,因此在序列化时需要检查其类型,只有当`Tag`的类型是可序列化的,才进行序列化。在反序列化时,如果`Tag`无法恢复,将被设置为`null`。 总之,通过...
3. **分布式计算**:在分布式环境中,序列化可以帮助在不同节点之间交换对象,尤其是在集群和session复制中。 **序列化过程**: - 当调用`ObjectOutputStream`的`writeObject()`方法时,序列化过程开始。这个方法会...
反序列化时,JVM使用这些头信息创建对象实例,然后将字节流中的数据复制到对象的数据成员中。 `ObjectOutputStream`和`ObjectInputStream`是Java提供的两个核心类,用于处理对象的序列化和反序列化。`...
总的来说,Java序列化是Java程序设计中一个强大的工具,它使得对象能够在不同的环境中持久化和复制,从而扩展了Java应用程序的灵活性和可移植性。理解并熟练掌握序列化机制对于高级软件开发者来说是非常重要的。
序列化是将整个对象转换为字节流,而克隆是创建对象的一个副本,通常只复制对象的直接属性,不涉及深层引用。 了解以上知识点后,Java开发者能更好地理解和运用对象序列化,解决实际开发中遇到的问题,提升代码的...
3. **对象克隆**:通过序列化和反序列化实现对象的深度克隆。 4. **缓存机制**:将对象状态存储到磁盘或内存中,以提高性能。 #### 三、序列化实现机制 Java提供了两种主要的序列化方式: 1. **标准序列化**(`...
序列化(Serialization)是Java系统中处理对象或对象图的过程,通过创建它们的序列化表示形式来创建。序列化的对象值和类型包含足够的信息,以确保可以重新创建出等效类型的对象。反序列化(Deserialization)是从...
5. **对象克隆:** 可以通过序列化和反序列化实现对象的深度复制。 #### 三、序列化与持久化的相似之处 尽管序列化和持久化在本质上有所区别,但它们之间的相似之处也非常明显: 1. **数据转换:** 无论是序列化...
3. **对象复制**:在某些情况下,需要创建对象的精确副本,序列化是实现这一目的的有效手段之一。 #### Java序列化的基本流程 Java序列化的基本流程可以分为以下几步: 1. **类信息描述**:首先输出子类的类信息...
【实验一对象序列化1】主要探讨的是Java中的序列化机制,这是Java中用于持久化对象状态的重要技术。序列化是指将对象的状态转化为字节序列的过程,而反序列化则是将字节序列恢复为对象的过程。这个过程允许对象在...
当对象被序列化时,它不仅仅是数据字段的简单复制。序列化过程还会包含类的信息、对象的完整继承树以及所有非静态、非transient字段的值。因此,尽管`TestSerial`类只有两个`byte`类型的字段,序列化后的字节流通常...
3. **简化复制和备份**:通过序列化,可以轻松地对对象进行复制和备份,这对于备份策略和灾难恢复计划至关重要。 4. **支持状态管理**:在Web应用中,为了保持用户会话的状态,通常需要在客户端和服务端之间交换...