【问题标题】:Difference between Serialized and Non Serialized Object? [duplicate]序列化和非序列化对象之间的区别? [复制]
【发布时间】:2019-11-17 02:07:18
【问题描述】:

我试图了解 Java 中的序列化和反序列化的含义。

我猜我们用 Java 语言编写的每件事都会在代码被编译并进入处理器执行时变成一组字节。编译后,一切都变成机器语言或字节。正确..?

所以对象创建已经是一组位于内存中待处理的字节,那么 Serialize 和 Non-Serialize 术语对对象有什么特别的作用.. ?

我不清楚在计算机硬件中想象这两个术语..!

谁能帮忙..?

谢谢

【问题讨论】:

  • 为什么不赞成我的问题..?
  • 序列化是指将一个对象转成 JSON 或 XML 等序列数据(字符串)。反序列化意味着将其从字符串转回对象
  • @jrswgtr,但是字符串和对象都已经是一组字节了..不是吗..?那为什么我们需要字符串而不是对象?
  • programdata 都采用字节的形式(从理解这一点开始)。 序列化是从已经运行的程序的角度来描述数据(对象)的。对象是由您的程序在运行时创建的。当这些对象以适合磁盘(或有时也是内存)的形式写入为字节时,它们被称为被序列化(并且当它们被读取这些字节为可供正在运行的程序使用的形式时被“反序列化”) )。
  • @Jon 说你想通过 HTTP 发送对象。然后你需要一个序列化的对象来做到这一点,因为 HTTP 不能处理对象,只能处理字符串

标签: java serialization deserialization


【解决方案1】:

序列化是一种持久性机制。

您在运行时使用它将“内存中”对象转换为可以存储在文件或数据库中的表示,或者可以通过某些网络发送的表示。

反序列化只是相反的操作:将“传输”表示转回“内存中”对象。

这样做的主要原因是:它允许“在内存中”表示任何有意义的东西。正如其中一个 cmets 所述:Java 对象不一定存在于内存的一个连续部分中。但是,当您想将此类对象“传递”到持久层或另一种编程语言时,必须对构成 Java 对象的(字段)data 进行这种顺序表示.

【讨论】:

  • 很好的答案。我想补充一点:正如@Jon 所说:“如果内存中的对象已经是一组字节,为什么还要使用序列化?”。这是不正确的,因为序列化也意味着用于与其他无法理解 Java 的“一组字节”格式的编程语言“通信”。 (也许你可以说得更好:-p).. 关于抽象的东西......
  • 区分“内存中”对象和序列化对象的一种方法是“内存中”对象可以分布在内存中的多个区域(因为稍微过度简化了每个 Java 对象都是一个例如,一个单独的区域和一个String 由一个区域中的String 和另一个区域中的关联char[] 的字段组成)。 serialized 形式是一个连续的字节块:一切都在一个易于处理的区域中。如果你传递它,你将传递你需要的关于字符串的一切。
  • @JoachimSauer 非常正确,我根据您的评论修改了我的答案!谢谢!
  • @jrswgtr 谢谢!回来找到如此有建设性的 cmets 总是很棒!
猜你喜欢
  • 2013-04-30
  • 2017-11-07
  • 1970-01-01
  • 2015-02-14
  • 1970-01-01
  • 2019-02-19
  • 2013-12-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多