Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.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
C# 为了跨线路传输数据,必须进行序列化吗?_C#_Java_Python_C - Fatal编程技术网

C# 为了跨线路传输数据,必须进行序列化吗?

C# 为了跨线路传输数据,必须进行序列化吗?,c#,java,python,c,C#,Java,Python,C,下面是我读到的一些东西,我想知道这句话是否属实 序列化是 转换数据结构或对象 转换为一个位序列,以便 存储在文件或内存缓冲区中, 或者通过网络传输 连接链接将被“恢复” 稍后在同一台或另一台计算机中 环境。[1]当生成 一系列的位将根据 序列化格式,它可以是 用于在语义上创建 与原作一模一样的复制品 对象对于许多复杂对象,例如 作为那些广泛使用 参考资料,此过程不是 直截了当 序列化只是一种奇特的方式,用于描述在需要传输特定数据结构、类等时所做的操作 例如,假设我有一个结构: struct Co

下面是我读到的一些东西,我想知道这句话是否属实

序列化是 转换数据结构或对象 转换为一个位序列,以便 存储在文件或内存缓冲区中, 或者通过网络传输 连接链接将被“恢复” 稍后在同一台或另一台计算机中 环境。[1]当生成 一系列的位将根据 序列化格式,它可以是 用于在语义上创建 与原作一模一样的复制品 对象对于许多复杂对象,例如 作为那些广泛使用 参考资料,此过程不是 直截了当


序列化只是一种奇特的方式,用于描述在需要传输特定数据结构、类等时所做的操作

例如,假设我有一个结构:

struct Color
{
    int R, G, B;
};

当你通过网络传输时,你不会说发送颜色。您创建一行位并发送它。我可以创建一个无符号字符*并连接R、G和B,然后发送它们。我只是对任何比原语或同构原语运行更复杂的东西进行了序列化,是的。

是的,序列化是通过有线传输数据的唯一方法。考虑序列化的目的是什么。您可以定义类的存储方式。在内存中,您无法确切知道类的每个部分在哪里。特别是如果你有一个列表,比如说,如果它很早就被分配了,但后来又被重新分配了,那么它很可能会被碎片化,所以它不是一个连续的内存块。你是如何把这个零碎的类发送到网上的


因此,如果您通过网络发送
列表
,它如何知道每个
ComplexType
的开始和结束位置。

需要某种形式的序列化,但可以采用多种形式。它可以是类似于dotNET序列化的东西,由该语言处理,也可以是自定义的构建格式。可能是一系列字节,其中每个字节代表一些只有您和您的应用程序才能理解的“神奇值”

例如,在dotNET中,我可以创建一个具有单个字符串属性的类,将其标记为可序列化,dotNET框架将处理大部分其他内容

我还可以构建自己的自定义格式,其中前4个字节表示发送数据的长度,所有后续字节都是字符串中的字符。但是,当然,您需要担心字节顺序、unicode与ansi编码等


通常,使用您的语言/OS/dev框架使用的任何框架都比较容易,但这不是必需的。

二进制序列化不是唯一的选项。例如,还可以将对象序列化为XML文件。或者作为一个JSON。

这里真正的问题不是越过电线,问题是在电线的另一端以相同的语义对象结束。为了在不同系统之间正确传输数据(无论是通过TCP/IP、软盘还是穿孔卡),必须将数据编码(序列化)为独立于平台的表示形式

由于对齐和类型大小问题,如果试图对对象进行直接的二进制传输,将导致未定义的行为(借用C/C++标准的定义)


例如,在不同的体系结构、平台、语言,甚至同一编译器的不同版本之间,编译器的大小和对齐方式可能会有所不同。

我认为您提出了错误的问题。序列化是计算机编程中的一个概念,要将某些内容视为序列化机制,必须满足某些要求

任何准备数据的方法,以使其能够以另一程序(包括但不限于另一系统上或另一时间的同一程序的另一实例)读取数据并重新实例化数据所代表的任何对象的方式进行传输或存储

注意,我把“对象”一词放在了这里。如果我写了一个程序,将一堆文本存储在一个文件中;然后我用其他程序,或者第一个程序的某个实例来读取数据。。。我还没有真正使用“序列化”机制。如果我以这样的方式写它,文本也存储了一些关于它是如何被操纵的状态。。。这可能需要序列化

该术语主要用于传达这样一个概念,即行为和状态的活动组合被呈现为一种形式,可以被另一个程序/实例读取并实例化。大多数序列化机制都绑定到特定的编程语言或虚拟机系统(在Java VM、C#VM等意义上;而不是在“VMware”虚拟机意义上)。JSON(和YAML)是一个值得注意的例外。它们表示的数据有相当接近的对象类,具有相当相似的语义,因此可以用多种不同的编程语言以有意义的方式实例化它们


并不是所有的数据传输或存储都需要“序列化”。。。可以使用某些存储和传输数据的方法进行序列化。在每个列表中,必须能够消除编程语言支持的数据类型之间的歧义。如果它的内容是:1必须知道它是文本还是整数、实数(相当于1.0)还是位。

严格来说,它不是唯一的选项;你可以说“远程处理”符合文本的意思;此处在接收器处创建了一个伪对象,该对象不包含任何状态。所有调用(方法、属性等)都被截获,只传输调用和结果。这避免了传输对象本身的需要,但如果涉及到过度“闲聊”的使用(即大量调用),则可能会非常昂贵,因为每个调用都有光速的延迟(加起来)

然而,”