序列化和流媒体之间有什么关系?

What is the relation between Serialization and streaming?

总是当我发现一些文章或视频在谈论流时,他们一定在谈论连载? 它们之间的关系是什么?或者具体来说, 我们可以说数据流总是需要序列化还是我们可以找到一些没有序列化的数据流?

首先,提醒一下串行与并行通信是有用的:如果我们以传输一个字节为例,在并行情况下,所有 8 位同时发送,在串行情况下,8 位同时发送一位一位地发送,并在接收端重新构建字节。

对于您的视频域示例,如果您将视频的一帧想象成大量字节的集合,比如说 720 x 1280 像素,每个像素由一个字节表示,那么我们需要 921,600 字节来表示帧.

如果您正在流式传输视频,您需要将每一帧(加上为简单起见我们将在此处忽略的开销)从服务器发送到客户端设备,因此您需要为每一帧发送 921,600 字节。

如果您有一个非常(非常!)大的并行连接,可以在一次通信中在服务器和客户端之间并行传输 921,600 字节,那么这就很容易理解了。

然而,情况几乎总是不是这样,即使对于小得多的数据结构也是如此,因此序列化通常是指将 921,600 字节分解为可以传输的大小的过程 - 并且该大小通常是一次一位。

一般一个视频会被分解成数据包,再将数据包传输到客户端。数据包本身也只是字节的集合,如果连接一次只允许传输一位信息,则需要分解数据包并一次发送 'serially' 一位。

更复杂的是,正如计算机科学和通信中的常见情况,这些术语在不同的上下文中可能有不同的含义。

例如,您可能会看到它提到您可以在某些客户端服务器通信中使用流式传输或 'serialise an object'。这通常意味着您可以发送原始数据 'stream' 并让客户端负责如何解释它,或者您可以使用一个框架或底层机制来获取一个对象,将其转换成一种格式可以串口传输,然后在另一端重构,交给客户端。事实上,在这两种情况下,实际通信都是串行的(如果它使用的是串行通信通道),因此这些术语在这里以不同的方式使用。