Разделяет двоичные данные на части заданного размера. Размер задается в байтах.
Синтаксис
РазделитьДвоичныеДанные(<ДвоичныеДанные>, <РазмерЧасти>)Полное описание, параметры и ограничения
Глобальный контекст.РазделитьДвоичныеДанные (Global context.SplitBinaryData)
Глобальный контекст (Global context)
РазделитьДвоичныеДанные (SplitBinaryData)
Доступен, начиная с версии 8.3.10.
Синтаксис:
РазделитьДвоичныеДанные(<ДвоичныеДанные>, <РазмерЧасти>)
Параметры:
<ДвоичныеДанные> (обязательный)
Тип: ДвоичныеДанные.
Объект типа ДвоичныеДанные.
<РазмерЧасти> (обязательный)
Тип: Число.
Размер одной части данных.
Возвращаемое значение:
Тип: Массив.
Массив объектов типа ДвоичныеДанные.
Описание:
Разделяет двоичные данные на части заданного размера. Размер задается в байтах.
Доступность:
Тонкий клиент, веб-клиент, мобильный клиент, сервер, толстый клиент, внешнее соединение, мобильное приложение (клиент), мобильное приложение (сервер), мобильный автономный сервер.
См. также:
Глобальный контекст, метод РазделитьФайл
Использование в версии:
Доступен, начиная с версии 8.3.10.
Методическая информация
Практические примеры
Разделить двоичные данные на части и восстановить исходные байты
Строку Книга превращаем в 10 байт UTF-8, делим по 4 байта и собираем обратно. Не пытаемся декодировать каждый фрагмент как отдельную строку.
Где и как запускать
Учебная база: создайте серверный общий модуль УчебныеЗадачи (флаг Сервер). Код без директив вставьте в тело процедуры ВыполнитьПример() Экспорт. Вызовите её из серверного обработчика команды учебной обработки. Не запускайте в рабочей базе.
Подготовка
Весь пример выполняется на числах, строках и двоичных данных, созданных в памяти. Реальные файлы, API и объекты базы не нужны.
Данные = ПолучитьДвоичныеДанныеИзСтроки("Книга", КодировкаТекста.UTF8, Ложь);
Части = РазделитьДвоичныеДанные(Данные, 4);
Если Данные.Размер() <> 10 Или Части.Количество() <> 3 Тогда
ВызватьИсключение "Неверно подготовлены учебные UTF-8 данные";
КонецЕсли;
Если Части[0].Размер() <> 4 Или Части[1].Размер() <> 4 Или Части[2].Размер() <> 2 Тогда
ВызватьИсключение "Ожидались части 4, 4 и 2 байта";
КонецЕсли;
Восстановлено = СоединитьДвоичныеДанные(Части);
Если ПолучитьHexСтрокуИзДвоичныхДанных(Восстановлено) <> ПолучитьHexСтрокуИзДвоичныхДанных(Данные) Тогда
ВызватьИсключение "Байты после сборки отличаются";
КонецЕсли;
Сообщить(ПолучитьСтрокуИзДвоичныхДанных(Восстановлено, КодировкаТекста.UTF8));
ЧастиБуфера = Новый Массив;
Для Каждого Часть Из Части Цикл
ЧастиБуфера.Добавить(ПолучитьБуферДвоичныхДанныхИзДвоичныхДанных(Часть));
КонецЦикла;
Буфер = СоединитьБуферыДвоичныхДанных(ЧастиБуфера);
ИзБуфера = ПолучитьДвоичныеДанныеИзБуфераДвоичныхДанных(Буфер);
Сообщить(ПолучитьHexСтрокуИзДвоичныхДанных(ИзБуфера) = ПолучитьHexСтрокуИзДвоичныхДанных(Данные));Разбор по шагам
UTF-8 без BOM даёт для пяти кириллических букв десять байт. Размер части измеряется в байтах, не в символах.
РазделитьДвоичныеДанные возвращает массив отдельных ДвоичныхДанных. Последний фрагмент может быть меньше заданного размера.
СоединитьДвоичныеДанные сохраняет порядок переданного массива. Сравниваем точные байты через hex, а не только отображаемую строку.
Для буферов используется отдельный СоединитьБуферыДвоичныхДанных. В этом упражнении разделитель не вставляем.
Как проверить результат
Части имеют размеры 4, 4 и 2; после сборки выводится Книга.
Последнее сравнение для пути через буферы даёт Истина.
Попробуйте размер части 3 в отдельной копии, обновив проверки размеров: фрагмент может разрезать UTF-8 символ, но сборка исходных байтов остаётся возможной.
Ожидаемый результат
Двоичные фрагменты собраны двумя API с сохранением исходного UTF-8 текста.
На что обратить внимание
Декодирование произвольной части может повредить символ, если граница проходит внутри его UTF-8 последовательности.
Много частей и одновременное хранение копий расходуют память. Это упражнение на 10 байт, не алгоритм для многогигабайтных файлов.
Части не содержат контрольной суммы или номера автоматически; для передачи по сети эти поля нужно проектировать отдельно.
Пример не запускался в вашей базе. Перед применением проверьте его в указанном учебном контексте.