为什么在内存中的类对象已经是二进制(C/C++)时进行序列化?

Amu*_*umu 9 c c++ serialization

我的猜测是数据分散在物理内存中(即使类对象的数据在虚拟内存中是顺序的),因此为了正确发送数据,需要重新组装,并且能够通过网络发送数据附加步骤是将主机字节顺序转换为网络字节顺序.这是对的吗?

Fil*_*efp 10

适当的序列化可用于将数据发送到任意系统,这可能无法在与源主机相同的架构下工作.


即使是仅由本机类型组成的对象也可能在两个系统之间进行麻烦的共享,因为在成员之间和之后可能存在额外的填充等等.在为相同体系结构编译但具有不同编译器版本的程序之间共享对象的原始内存转储也可能变成一个很大的麻烦.无法保证变量类型T实际存储在内存中.


如果你不使用指针(包括引用),并且数据意味着被转储的相同二进制文件读取,通常只需将原始结构转储到磁盘,但将数据发送到另一个主机时通常是安全的.鼓滚动序列化是要走的路.

我听说开发人员正在谈论ntohl/ htonl/ ntohl/ ntohs作为序列化/反序列化整数的方法,当你想到它说这与事实并不是那么遥远.


" 序列化 "一词通常用于描述这种" 以通用方式存储数据的复杂方法 ",但是又一次; 你的第一个编程任务,你被要求保存有关Dogs的信息(希望*)以某种方式使用序列化.

* "希望"意味着您没有将Dog对象的原始内存表示转储到磁盘


fwg*_*wgx 7

指针!

如果你已经在堆上分配了内存,那么最终会得到一个指向任意内存区域的序列化指针.如果你只是有几个intschars则是你可以只写出来直接到一个文件,但随后变得与平台相关的,因为你提到的字节顺序.