Какова связь между сериализацией и потоковой передачей?
Всегда, когда я нахожу, что некоторые статьи или видео говорят о потоке, они обязательно говорят о сериализации? Какая связь между ними? или, если быть точным, можем ли мы сказать, что поток данных всегда нуждается в сериализации, или мы можем найти некоторый поток данных без сериализации?
1 ответ
Во-первых, полезно иметь напоминание о последовательной и параллельной связи: если мы возьмем простой пример передачи байта, в параллельном случае все 8 бит отправляются одновременно, а в последовательном случае 8 бит отправляются один за другим. один и тот же байт снова строятся на принимающей стороне.
Для примера вашего домена видео: если вы представляете кадр видео как большой набор байтов, скажем, 720 на 1280 пикселей, и каждый пиксель представлен байтом, то нам нужно 921 600 байтов для представления кадра.
Если вы транслируете видео, вам нужно отправить каждый кадр (плюс служебные данные, которые мы здесь упростим для простоты) с сервера на клиентское устройство, поэтому вам нужно отправить 921 600 байт для каждого кадра.
Если бы у вас было очень (очень!) Большое параллельное соединение, которое могло бы передавать 921 600 байт параллельно между сервером и клиентом за одно соединение, то это было бы легко понять.
Однако, это почти всегда не так, даже для гораздо меньших структур данных, поэтому сериализация - это имя, которое обычно дается процессу взятия 921 600 байт и разбиения их до размера, который вы можете передавать - и этот размер часто равен единице. немного за один раз.
Обычно видео будет разбито на пакеты и пакеты, переданные клиенту. Сами пакеты также являются просто коллекциями байтов, и если соединение позволяет передавать только один бит информации за один раз, то пакет необходимо разбивать и отправлять "последовательно" по одному биту за раз.
Чтобы усложнить ситуацию, как это обычно бывает в информатике и коммуникациях, термины могут означать разные вещи в разных контекстах.
Например, вы можете заметить, что в какой-то связи клиент-сервер вы можете передавать или сериализовать объект. Обычно это означает, что вы можете либо отправить "поток" необработанных данных и позволить клиенту нести ответственность за то, как его интерпретировать, либо вы можете использовать структуру или базовый механизм, который будет принимать объект, преобразовывать его в формат, который может передаваться последовательно, а затем восстановить его на другом конце и передать его клиенту. На самом деле фактическая связь является последовательной в обоих случаях (если она использует последовательный канал связи), поэтому здесь термины используются по-другому.