Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.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_Deserialization - Fatal编程技术网

java中的序列化与反序列化

java中的序列化与反序列化,java,serialization,deserialization,Java,Serialization,Deserialization,我试图理解java中序列化和反序列化之间的区别。我知道网上有很多答案和主题,但我没有发现任何适合理解的 以下是我的一些疑问: 1) 对象以反序列化形式位于内存中,但它看起来如何?它不是只以字节形式(0和1)存储吗?还是其他形式 2) 一旦对象被序列化,它就是一个字节流,那么它看起来如何,或者与反序列化形式有什么不同(步骤1) 3) 当我们通过网络发送对象的数据时,哪种形式转换成字节 我知道这可能是非常愚蠢的怀疑,但请容忍我,让我走上正确的方向。!:) 根据Java版本、您的PC(比如不同的字节顺

我试图理解java中序列化和反序列化之间的区别。我知道网上有很多答案和主题,但我没有发现任何适合理解的

以下是我的一些疑问:

1) 对象以反序列化形式位于内存中,但它看起来如何?它不是只以字节形式(0和1)存储吗?还是其他形式

2) 一旦对象被序列化,它就是一个字节流,那么它看起来如何,或者与反序列化形式有什么不同(步骤1)

3) 当我们通过网络发送对象的数据时,哪种形式转换成字节

我知道这可能是非常愚蠢的怀疑,但请容忍我,让我走上正确的方向。!:)

  • 根据Java版本、您的PC(比如不同的字节顺序、64/32位系统上不同的对象头大小,甚至JVM标志)以及所有内容,它的外观可能会有所不同。它还包含许多序列化时不需要的数据,如垃圾收集、锁、内部/系统哈希代码等信息。您可以通过查找对象头了解更多信息:
    但毕竟对象只是内存中的一些字节

  • 序列化的主要目标是创建一些标准化的表单,以便以后可以轻松地读回,而不依赖于您的体系结构、系统,也不需要像GC one这样的数据。
    这可以是一些原始的二进制格式,比如默认的java序列化,或者一些二进制json,或者一些基于文本的格式,比如json、yaml、xml。(文本也是字节,但确实更易于显示和人类阅读)
    有关序列化本身的更多信息,请阅读此问题:


  • 这是您的选择-您正在发送该对象,因此您是需要序列化该对象的人,在某些语言中(如果您使用一些不安全的魔法,也可以使用java),可以只发送与内存中相同的数据,但在大多数情况下,这是一个非常糟糕的主意。所以,当通过网络发送数据时,您应该首先序列化它


  • 你能解释一下你所说的第三点是什么意思吗?“只发送与内存中相同的数据是可能的,但在大多数情况下这是一个非常糟糕的主意。”为什么?@Elena,因为这样你可能无法使用它,因为你会将它发送到期望不同架构的PC。在java中,我不确定在将这样的对象注入内存后是否可以使用它——从未尝试过做这样奇怪的事情