代码之家  ›  专栏  ›  技术社区  ›  danpker

Java中的序列化是什么?[复制品]

  •  20
  • danpker  · 技术社区  · 15 年前

    可能重复:
    What is object serialization?

    我用Swing和Eclipse制作了一个小的RSS阅读器应用程序,它一直告诉我“可序列化类mocharssview不会声明long类型的静态最终serialversionID字段。”

    序列化是什么?它有什么好处?

    7 回复  |  直到 10 年前
        1
  •  41
  •   Faahmed    10 年前

    可序列化是一个标记接口,它告诉JVM它可以将对象的状态写入某些流(基本上读取所有成员,并将其状态写入流、磁盘或其他对象)。默认机制是二进制格式。您还可以使用它来克隆事物,或者在调用之间保持状态,通过网络发送对象等。

    您可以让Eclipse为您生成一个(基本上只是一个长的随机但唯一的ID)。这意味着您可以控制何时认为类与序列化版本兼容,或者不兼容。

    (注意:所有非瞬态成员变量必须是可序列化类,否则您将得到一个错误,因为JVM将通过结构递归,将每个对象的状态写入到将基元写入到ObjectOutputStream的级别)。

        2
  •  28
  •   renu    13 年前

    Java序列化-----你见过序列化对象中的内容吗?我将向您解释什么是Java序列化,然后为您提供序列化的示例。最后,最重要的是,让我们探究序列化对象内部的内容及其含义。这是Java序列化的内部结构,它是如何工作的。如果您希望拥有Java序列化的实现,本文将为您提供一个启动的好平台。

    什么是Java序列化? Java序列化的主要目的是将对象写入流中,以便可以通过网络传输该对象,并且可以重新构建该对象。当涉及到两个不同的方面时,您需要一个协议来重新构建完全相同的对象。Java序列化API只是为您提供了这一点。您可以利用序列化功能的其他方法是,您可以使用它执行深度复制。

    为什么我在上面的定义中使用了A.A.Y主要目的,有时人们使用Java序列化来代替数据库。只是一个占位符,您可以在其中跨会话持久化对象。这不是Java序列化的主要目的。有时,当我采访Java的候选人时,我听到他们说Java序列化被用来存储(保存状态)一个对象并检索它。他们将其与数据库同义。这是对序列化的错误理解。

    如何序列化? 当您想要序列化一个对象时,相应的类应该实现可序列化的标记接口。它只是通知编译器这个Java类可以被序列化。可以标记不应序列化为瞬态的属性。打开流并将对象写入其中。Java API负责序列化协议,并将Java对象保持在与协议一致的文件中。反序列化是将对象从文件恢复到其原始形式的过程。

    这里的协议意味着,对串联人和非串联人的理解。包含序列化对象的文件的内容是什么?

        3
  •  6
  •   bogertron    15 年前

    序列化是将对象写入可读的形式,并允许在不同的时间重新创建对象。 因此,如果我在一个JVM下在计算机A上创建了一个小部件,将其序列化并保存,并将其发送到运行不同的计算机B,那么另一个JVM将能够对其进行反序列化,并以相同的值和结构重新创建它。

        4
  •  6
  •   Tom Hawtin - tackline    15 年前

    Java序列化是一种持久化对象结构的方法。

    对于可序列化类来说,声明 serialVersionUID 作为一个 private static final long 编译时间常数。这用于检查对象数据和类代码是否声明是兼容的。

    那么Eclipse为什么要告诉你这个?可能,您正在扩展(或可能正在实现的接口)的类实现 java.io.Serializable .这意味着包括您的子类型在内的所有子类型都是可序列化的。几乎可以肯定你不在乎。您应该能够通过应用清除警告 @SuppressWarnings("serial") 在类或包上(在 package-info.java )如果要强制阻止类的实例序列化,请添加(从内存中):

    private static final java.io.ObjectStreamField[] serialPersistentFields = {
        null
    };
    private void writeObject(
        java.io.ObjectOutputStream ou
    ) throws java.io.IOException {
        throw new java.io.NotSerializableException();
    }
    private void readObject(
        java.io.ObjectInputStream in
    ) throws java.io.IOException, java.lang.ClassNotFoundException {
        throw new java.io.NotSerializableException();
    }
    private void readObjectNoData(
    ) throws java.io.ObjectStreamException {
        throw new java.io.NotSerializableException();
    }
    

    这可能不是世界上最好的思想体系(尽管它比许多人所认为的要好得多)。

        5
  •  5
  •   Stephen    11 年前

    Serialization 将对象转换为可存储磁盘格式的过程,以便以后重新加载。有关详细信息,请查看链接!

        6
  •  2
  •   Alan    15 年前

    序列化是一种获取对象(类的一个实例)并将其设置为通过网络传输到磁盘等的方法。

        7
  •  2
  •   david a.    15 年前

    序列化是将对象实例的表示形式写入流(或写入字节序列)的过程。 看看太阳怎么说: http://java.sun.com/developer/technicalArticles/Programming/serialization/