Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.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
“的目的是什么?”;“可序列化”;当每个对象都可以自动序列化时,Java中的接口?_Java_Serialization - Fatal编程技术网

“的目的是什么?”;“可序列化”;当每个对象都可以自动序列化时,Java中的接口?

“的目的是什么?”;“可序列化”;当每个对象都可以自动序列化时,Java中的接口?,java,serialization,Java,Serialization,我读过“序列化是将一个对象转换成一系列字节。” 但是,这个定义适用于每个Java对象,因为所有Java对象在内存中都表示为字节 如果所有java对象都可以表示为字节,那么实现“可序列化”接口的目的是什么 我的猜测是,实现“Serializable”接口可以充当某种标志(您甚至不需要实现任何方法),但有一个名为“NotSerializable”的接口不是更有意义吗 编辑: 我发现这个问题与前一个问题重复: 我还发现了一个很好的文档: 谢谢你的回答 我读过“序列化是将一个对象转换成一系列字节。”

我读过“序列化是将一个对象转换成一系列字节。”

但是,这个定义适用于每个Java对象,因为所有Java对象在内存中都表示为字节

如果所有java对象都可以表示为字节,那么实现“可序列化”接口的目的是什么

我的猜测是,实现“Serializable”接口可以充当某种标志(您甚至不需要实现任何方法),但有一个名为“NotSerializable”的接口不是更有意义吗

编辑: 我发现这个问题与前一个问题重复:

我还发现了一个很好的文档:

谢谢你的回答

我读过“序列化是将一个对象转换成一系列字节。”

没有太多的定义。Javadoc中的一个更好:“对象序列化支持将对象及其可访问的对象编码为字节流。序列化还支持从一个流互补地重建对象图。”

但是,这个定义适用于每个Java对象,因为所有Java对象在内存中都表示为字节

无法访问的字节。这是一个糟糕的定义

如果所有java对象都可以表示为字节,那么实现“可序列化”接口的目的是什么

这样您就可以将它们序列化为流并进行恢复

我的猜测是,实现“Serializable”接口充当某种标志(您甚至不需要实现任何方法)

但是有一个叫做“NotSerializable”的接口不是更有意义吗

默认情况下,让所有对象可串行化是没有意义的:考虑密码,例如socket,< /P> < UL>
  • 它们更容易保存在文件中,因为您不必检索每个对象的每个字节并写入文件
  • 序列化允许您指定
    SerialVersionUID
    ,它允许您在反序列化时跟踪对象的版本,并避免不兼容问题

  • 序列化用于获取表示对象状态的字节序列。然后,您可以将它们保存到文件中,以便稍后恢复。或者通过网络发送。没错,要使对象可序列化,只需实现java.io.serializable即可。密码可序列化非常有意义,即使它不是您希望意外序列化的东西。Sockets是一个很好的例子,或开放文件流,或windows。@immibis不适用于Java的设计者,因为这是他们不断引用的例子之一,对我来说也不适用,因为这是一个表面上的安全漏洞。有时您想序列化密码(尽管可能不使用Java序列化),特别是通过某些安全通道(即网站登录)进行身份验证。请注意,Runtime.exec不会试图阻止您执行“rm-rf--no preserve root/”@immibis和downvoter,您在这里与Java的设计者争论。与任何其他命令一样,它们不会阻止您运行
    rm-rf/
    ,但它们也不会为它提供API。如果愿意,您可以序列化密码:只是默认情况下不可以。