Как стать автором
Обновить

Комментарии 8

НЛО прилетело и опубликовало эту надпись здесь

Не бинарная каша, а COM Storage. Объект со своей внутренней файловой системой.

НЛО прилетело и опубликовало эту надпись здесь
Все файлы — бинарная каша. То, что старый формат был плохо описан и даже теперь документация по нему — тёмный лес, вовсе не отменяет того что это вполне структурированная бинарная каша. И потом, старый формат уже архаизм. Кто им пользуется?
А по существу статьи — ну да, можно свой zlib написать, хоть без сжатия, хоть с ним. И XML — это вообще текст, если на то пошло. Не совсем понятно, в чём достижение. И зачем. Формат ZIP прекрасно описан, как и алгоритмы сжатия. Это можно самому написать на любом ЯП.
НЛО прилетело и опубликовало эту надпись здесь

А как же очень старые версии эксель? Там, вроде, OLE1. А OLE1 !≈ COM :)

Формат zip допускает сценарий, когда в zip файл дописывают данные. По указанной вами ссылке это упоминается

Иногда бывает невозможно вычислить данные на момент записи LocalFileHeader, тогда в crc32compressedSize и uncompressedSize записываются нули, третий бит в generalPurposeBitFlag ставится в единицу, а после LocalFileHeader добавляется структура типа DataDescriptor.

но подробно не описано.
В случае с формированием xlsx, docx и pptx, наверное его лучше использовать? Создаёшь заготовку xlsx; удаляешь из него xl\worksheets\sheet1.xml; подготавливаешь архив; а потом при отдаче в поток дописываешь xl\worksheets\sheet1.xml с нужными данными.

Если есть задача формировать документы для отдачи, напр. по http, то да, можно использовать и способ дописывания размера в DataDescriptor. С другой стороны приведенный способ, пойдет только для небольших файлов, т.к. не используется sharedStrings и компрессию, а для таких файлов объем занимаемой памяти десяток килобайт (из них шаблон - 7Кб), так что не проблема сформировать целый документ прямо в памяти.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории