Base64 для больших файлов?

Я работаю над простой программой передачи файлов и папок на С# с использованием протокола tcp.

Метод, который я использую для передачи файла, состоит в том, чтобы разделить его на небольшие части. Каждая из этих частей будет закодирована в Base64 и вставлена ​​в более сложное сообщение JSON, которое затем будет отправлено другой стороне. Таким образом, благодаря Base64 каждое сообщение всегда будет в текстовом виде.

У меня нет большого опыта работы с сетями, и я решил сделать этот выбор, потому что чтение в Интернете, отправка потока байтов без какого-либо кодирования может привести к тому, что какая-то часть сообщения может быть интерпретирована маршрутизатором или брандмауэром как команда. прервать соединение.

Моя проблема в том, что мое программное обеспечение также работает с очень большими файлами (> 10 ГБ), а кодирование base64 только увеличивает размер данных и делает передачу очень медленной, потому что процессор так много работает для непрерывного кодирования/декодирования.

Теперь я хотел бы знать:

  • Правда ли, что, например, отправка простого файла, преобразованного только в байтах, без предварительного кодирования в каком-либо формате, может вызвать проблемы с маршрутизатором или брандмауэром?
  • Правильно ли использовать Base64 для передачи больших файлов?
  • Есть ли лучшие альтернативы?

TCP — это протокол общего назначения для передачи потоков байты в обоих направлениях. Если бы существовали последовательности байтов, которые он не мог бы безопасно и надежно передавать, его конструкция не удалась бы.

Damien_The_Unbeliever 08.04.2019 15:49

Какой тип двоичных данных вы пытаетесь отправить? Почему он такой большой?

Saad Anees 08.04.2019 15:52

TCP надежен, потому что данные отправляются блоками до 1500 байт с CRC в каждом блоке, и если блок не является ПОДТВЕРЖДЕНИЕМ, он повторно отправляется автоматически. Кодирование не требуется, но размер данных должен быть известен получателю, чтобы он не прекращал чтение в неправильном месте (либо завершающий символ, не являющийся частью данных, либо добавление счетчика байтов к началу). JSON — это http со специальными символами, которые нельзя отправить и которые должны быть в формате Base64.

jdweng 08.04.2019 16:03
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
3
3 439
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Is it true that for example, sending a simple file converted only in bytes without first being encoded in any format, risks causing a problem to the router or firewall?

Нисколько. Это совершенно нормально, например, все, что HTTPS-связь является двоичной, и она работает.

Is it correct to use Base64 for large file transfers?

Хотя это можно сделать, это бесполезно, если базовый уровень поддерживает двоичные данные.

Are there better alternatives?

Используйте двоичный код напрямую. Ничего не кодируйте и не декодируйте. Не оборачивайте его в слои вроде JSON, которые на самом деле не нужны для передачи.

Другие вопросы по теме