Бинарные блоки

Бинарные блоки.

Рассматриваемый API умеет работать помимо файлов также с источниками, относящимися к другому типу и носящими название бинарных блоков (binary large object, blob). Бинарный блок — это объект, представляющий собой необработанные данные. Этот тип был создан для преодоления ограничений JavaScript на работу с двоичными данными. Обычно бинарный блок генерируется на основе файла, но так бывает не всегда. Это хороший способ работать с данными без необходимости загружать файл целиком в память, и он позволяет обрабатывать двоичную информацию небольшими фрагментами.

Существует несколько вариантов использования бинарных блоков, но главная их задача — обеспечивать эффективный способ обработки больших объектов сырых данных или больших файлов. Для создания бинарного блока на основе другого бинарного блока или файла в API предусмотрен метод slice(): slice(start, length, type). Этот метод возвращает новый бинарный блок, созданный на базе другого бинарного блока или файла. Первый атрибут указывает начальную точку, второй — длину нового бинарного блока, а третий представляет собой необязательный параметр, задающий тип данных.

Листинг 12.5. Работа с бинарными блоками

Function initiate(){

Databox=document. getElementById(‘databox’); var myfiles=document. getElementById(‘myfiles’); myfiles. addEventListener(‘change’, process, false);

}

Function process(e){

Var files=e. target. files;

Databox. innerHTML=»;

Var file=files[0];

Var reader=new FileReader();

Reader. onload=function(e){ show(e, file); };

Var blob=file. slice(0,1000);

Reader. readAsBinaryString(blob);

}

Function show(e, file){

Var result=e. target. result; databox. innerHTML=’Имя: ‘+file. name+'<br>’; databox. innerHTML+^Тип: ‘+file. type+'<br>’;

Databox. innerHTML+=’Pa3Mep: ‘+file. size+’ bytes<br>’; databox. innerHTML+=’Pa3Mep бинарного блока: ‘+result. length+’ bytes<br>’; databox. innerHTML+=’Бинарный блок: ‘+result;

}

Window. addEventListener(‘load’, initiate, false);

Из-за несовместимости с ранее существовавшими методами сейчас ведется разработка нового метода для замены slice. До тех пор, пока новый метод не появится, для тестирования кода из листинга 12.5 в последних версиях браузеров Firefox и Google Chrome вам нужно будет заменять название slice названиями, содержащими браузерные префиксы: mozSlice или webkitSlice соответственно. Для получения более подробной информации зайдите на наш веб-сайт и изучите ссылки для этой главы.

В коде из листинга 12.5 мы делаем то же самое, что делали раньше, но на этот раз вместо считывания файла целиком с помощью метода slice() создаем бинарный блок. Длина блока равна 1000 байт, а начинается он с нулевого байта файла. Если пользователь загружает файл размером менее 1000 байт, то длина бинарного блока ограничивается размером файла (от начала до метки EOF, то есть End of File — конец файла).

Для отображения информации, полученной в процессе, мы регистрируем обработчик события onload с анонимной функцией, позволяющей отправить ссылку на объект file. Принимает данную ссылку функция show(), которая и выводит на экран значения свойств объекта.

У бинарных блоков огромное количество преимуществ. Например, можно в цикле сгенерировать несколько бинарных блоков из одного файла, а затем обработать получившиеся части одну за другой. Это удобно для создания асинхронных загрузчиков, программ для обработки изображений и решения многих других задач. Бинарные блоки открывают новые возможности кода JavaScript.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *