什么是Java中的序列化?

dan*_*ker 20 java

可能重复:
什么是对象序列化?

我使用Swing制作了一个小型RSS阅读器应用程序,Eclipse一直告诉我"可序列化类MochaRSSView没有声明类型为long的静态最终serialVersionUID字段"

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

Mic*_*ale 41

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

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

(注意:所有非瞬态成员变量必须是可序列化的类,否则您将收到错误 - 因为JVM将通过结构写出每个对象的状态,直到将原语写入ObjectOutputStream的级别) .


小智 28

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

什么是Java序列化?java序列化的主要目的是将对象写入流中,以便可以通过网络传输该对象,并且可以再次重建该对象.当涉及两个不同的方时,您需要一个协议来重新生成完全相同的对象.Java序列化API就是为您提供的.您可以使用序列化功能的其他方法是,您可以使用它来执行深层复制.

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

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

协议意味着,序列化人与反序列化人之间的理解.包含序列化对象的文件内容是什么?

  • 是从这个链接复制??? 至少尝试改变单词.http://javapapers.com/core-java/java-serialization/ (24认同)

bog*_*ron 6

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


Tom*_*ine 6

Java Serialization是一种持久化对象结构的方法.

将serialisable类声明serialVersionUIDprivate static final long编译时常量是最佳做法.这用于检查声称对象数据和类代码是否兼容.

那么为什么Eclipse会告诉你这个呢?可能是您正在扩展的类(或可能正在实现的接口)实现的类java.io.Serializable.这意味着包括你的所有子类型都是可序列化的.几乎可以肯定你不在乎.您应该能够通过@SuppressWarnings("serial")在类或包(in 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();
}
Run Code Online (Sandbox Code Playgroud)

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


Jam*_*s B 5

序列化是将对象转换为磁盘可存储格式的过程,以便稍后重新加载.查看链接以获取更多信息!