Zip-уем данные на лету

September 2nd, 2008 Begemot Posted in Программирование

Встроенные удобства это приятно!:)

Пишу данные в базу, возникла мысль что архивирование может быть очень кстати, попробывал – действительно стало лучше. Арихивирование благодаря встроенным средствам wxWidgets делается легко и быстро. Просто пропускаем данные через wxZlibOutputStream который архивирует\распаковывает на лету.


void SavecbContentToStream(wxMemoryOutputStream &memout, bool zlib/*=false*/) const
{
   scoped_ptr<wxDataOutputStream> dos;
   scoped_ptr<wxZlibOutputStream> zlibstr;

  if(zlib)
   {
        zlibstr.reset(new wxZlibOutputStream(memout, -1, wxZLIB_GZIP));
        dos.reset(new wxDataOutputStream (*zlibstr));
   }
   else
        dos.reset(new wxDataOutputStream (memout));

    // write some data …
   *dos <<(wxUint16)1 <<(wxUint16)cbContent.size();
   //  ...
}

Функция записывает данные в переданный буфер с опциональным архивированием их.


Если пост полезен для вас вы можете подписаться на RSS или мы можем доставлять вам новые посты прямо в ваш почтовый ящик.

6 Responses to “Zip-уем данные на лету”

  1. Такой подход будет работать на небольшой базе и если блобы тоже небольшие по размерам. А если данных много то будет тормозить. К тому же полнотекстовый поиск отпадает в таком случае.

    ЗЫ: чото с кодом ты намудрил, там какие-то теги закрывающие появились и имена классов чото в ловеркейсе.

  2. Ну да, я и не претендую на то что открыл универсально решение:) для моей конкретно задачи - подходит очень хорошо. Причем никакой связи с размером базы данных нету (опять же у меня). Поиск по этим полям не планируется:)

    Поинт был в том что в wxWidgets есть втроеное зипование, и что пользоватся легко и просто и это ++.

    Да траблы есть или у меня руки кривые, или это ЛайвВрайтер, или плагин…короче запарился я вставлять код нормально, расскажи как ты это делаешь?

  3. ну как, беру в режим HTML и прописую [сорскоде][/сорскоде] а потом внутрь копипастю код из студии

  4. А можно узнать, зачем вообще архивировать базу данных? Чтобы места меньше занимала, или есть какие-то другие тайные умыслы?

  5. Я архивирую не базу, а только одно поле в ней. Основная причина, экономия места.
    Еще есть версия, что прочесть с диска сжатые данные и разархивировать их быстрее чем прочесть несжатые, незнаю правда насколько это правда… если и правда, то наверное только на больших массивах данных, а не как у меня. Значит остается только размер.

  6. Спасибо за разъяснение, Николай.

Leave a Reply