总是当我发现一些文章或视频在谈论流时,他们必然在谈论序列化?它们之间有什么关系?或者更具体地说,我们可以说数据流总是需要序列化还是我们可以找到一些没有序列化的数据流?
首先,提醒一下串行与并行通信:如果我们举一个传输字节的简单示例,在并行情况下,所有 8 位都同时发送,而在串行情况下,这 8 位由一个发送一个字节一个和字节在接收端再次构建。
对于您的视频域示例,如果您将视频的一帧想象为一个大的字节集合,比如说 720 x 1280 像素,并且每个像素由一个字节表示,那么我们需要 921,600 字节来表示该帧。
如果您正在流式传输视频,您需要将每个帧(加上为简单起见我们将在此处忽略的开销)从服务器发送到客户端设备,因此您需要为每个帧发送 921,600 字节。
如果您有一个非常(非常!)大型并行连接,可以在一次通信中在服务器和客户端之间并行传输 921,600 字节,那么这将很容易理解。
然而,情况几乎总是如此,即使对于小得多的数据结构,因此序列化通常是取 921,600 字节并将它们分解为您可以传输的大小的过程的名称 - 而该大小通常是一个一点一点。
通常,视频会被分解成数据包,然后将数据包传输到客户端。数据包本身也只是字节的集合,如果连接一次只允许传输一位信息,那么数据包需要被分解并一次“串行”发送一位。
使事情复杂化,就像计算机科学和通信中的常见情况一样,这些术语在不同的上下文中可能意味着不同的事物。
例如,您可能会看到它提到您可以在某些客户端服务器通信中流式传输或“序列化对象”。这通常意味着您可以发送原始数据“流”并让客户端负责如何解释它,或者您可以使用框架或底层机制来获取对象,将其转换为可以串行传输,然后在另一端重构并提供给客户端。事实上,两种情况下的实际通信都是串行的(如果它使用串行通信通道),因此这里的术语以不同的方式使用。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句