Java中的序列化是什么?

Java中的序列化是什么?,java,Java,可能重复: 我使用Swing制作了一个小的RSS阅读器应用程序,Eclipse一直告诉我“可序列化类MocharsView不会声明一个long类型的静态最终serialVersionUID字段” 什么是序列化?它有什么好处?序列化是将对象写入可读的形式,并允许在不同的时间重新创建对象。 因此,如果我在一台JVM下的计算机a上创建了一个小部件,将其序列化并保存,然后将其发送到运行另一台JVM的计算机B,那么另一台JVM将能够对其进行反序列化,并使用相同的值和结构重新创建它(基本上读取所有成员,并

可能重复:

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


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

序列化是将对象写入可读的形式,并允许在不同的时间重新创建对象。
因此,如果我在一台JVM下的计算机a上创建了一个小部件,将其序列化并保存,然后将其发送到运行另一台JVM的计算机B,那么另一台JVM将能够对其进行反序列化,并使用相同的值和结构重新创建它(基本上读取所有成员,并将其状态写入流、磁盘或其他内容)。默认机制是二进制格式。您还可以使用它克隆内容,或在调用之间保持状态,通过网络发送对象等

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


(注意:所有非临时成员变量都必须是可序列化的类,否则会出现错误-因为JVM将通过结构递归,将每个对象的状态写入ObjectOutputStream,直至将原语写入ObjectOutputStream).

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

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

序列化是将对象实例的表示形式写入流(或字节序列)的过程。
看看Sun是怎么说的:

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

serialisable类的最佳实践是将
serialVersionUID
声明为
私有静态final long
编译时常量。这用于检查对象数据和类代码是否声称兼容

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


它可能不是世界上最好的思考系统(尽管它比许多人认为的要好得多).

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

什么是Java序列化? java序列化的主要目的是将对象写入流中,以便通过网络传输该对象并重新生成该对象。当涉及到两个不同的方时,您需要一个协议来重新生成完全相同的对象。java序列化API仅提供了这一点。您还可以通过其他方式利用fe序列化的本质是,您可以使用它执行深度复制

我在上述定义中使用“主要目的”的原因是,有时人们使用java序列化来替代数据库。只是一个占位符,您可以在其中跨会话持久化对象。这不是java序列化的主要目的。有时,当我采访java候选人时,我听到他们说java序列化就是我们用于存储(保存状态)对象并检索它的ed。他们将其与数据库同义使用。这是对序列化的错误理解

如何序列化? 当您想要序列化一个对象时,相应的类应该实现标记接口serializable。它只是通知编译器这个java类可以序列化。您可以将不应该序列化的属性标记为瞬态。您打开一个流并将对象写入其中。java API负责序列化协议和按照协议将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();
}