Какова структура файла???

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Lei fang
Сообщения: 49
Зарегистрирован: 28 май 2005, 21:25
Откуда: Саратов
Контактная информация:

Всем привет!!!
Скачивал я очередную книжку по C++, и обратил внимание на скорость 11кб... Модем у меня 56к... Вспомнил, что раньше уже было такое.

Попробуйте скачать вот этот файл (http://www.planetdreamcast.nm.ru/file.exe), и обратите внимание на скорость. ОНА БЕШЕННАЯ!!! Не волнуйтесь о *.exe, это обычный текстовик сгенерированный программой генерации всех подмножеств. Пришлось дать расширение *.exe, потому что только так он начинает скачиваться, а с другими просто открывается.

Встал вопрос, а из чего сделан файл? Допустим возьмем *.jpg. Они же отличаются внутренней структурой.
Присвоим значения:
1 - квадрат
2 - круг
3 - треугольник
То есть, если на рисунке изображены квадрат и круг, то код файла будет "12". Координаты не будем рассматривать.

Если все это так, то у меня есть вопрос, а что если каждому значению исходного файла присвоить значение текствого файла, то есть 1=а, 2=б, 3=в. Проблему с нехваткой словаря, думаю, можно как-нибудь решить. То есть картике с кругом и квадратом будет соответствовать текстовый файл, в котором будет записано "аб". Далее поместить этот текстовый файл на сервер, откуда его скачают и заново преобразуют в исходный файл.

Как Вы думаете, на С++ можно реализовать такую программу или это на грани фантастики?
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Подход уже реализован. Это называется векторной графикой. Реализовать, думаю, не это не сложно. Достаточно знать формат jpg. Вот примерный алгоритм:

- создаём memory DC.
- в цикле по всем командам из текстового файла совершаем прорисовку фигур в этот DC.
- берём bimap из DC.
- перегоняем bitmap в jpg.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Lei fang
Сообщения: 49
Зарегистрирован: 28 май 2005, 21:25
Откуда: Саратов
Контактная информация:

Хм... Я картинку взял к примеру, картинки можно и так качать, а вот если бы преобразовать музыку или видео, было замечательно. Ведь моя цель повысить скорость закачки больших файлов, а не картинок.
Ведь качать 100мб на скорости 5кб или 11кб - разные вещи. Текстовик должен побольше весить чем исходник, но скорость значительно выше.
Вот в чем моя цель.

Возможно ли таким образом перекодировать *.mpg в текстовик, а затем его заново перекодировать в *.mpg?
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Скорость закачки не зависит от расширения файла, если ты об этом :) .
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Lei fang
Сообщения: 49
Зарегистрирован: 28 май 2005, 21:25
Откуда: Саратов
Контактная информация:

>>Скорость закачки не зависит от расширения файла, если ты об этом.
Нет, конечно, я не об этом. Важно не то, какое у файла расширение, а какова его природа. Только текстовые файлы, не важно с каким расширением, качаются быстрее.

Как говорится, я пишу то, что вижу, а вижу я вот что:
Изображение и Изображение.
Против правды не пойдешь.

Romeo, ты сам попробуй скачать тот файл, и убедишься в скорости (если у тебя модем на 56к, а если нет, то незнаю что будет).

Я имею ввиду не смену расширения файла.
Приведу другой пример:
Я знаю, что файл состоит из байтов, но ведь программы использующие этот файл интерпретируют эти байты в необходимую информацию (изображение, песню и т. д.)

Допустим у нас есть мелодия из 5 нот (До, Рэ, Ми, Фа, Со)
Каждой ноте соответствует определенная последовательность байтов.
Допустим:
1 - До
2 - Рэ
3 - Ми
4 - Фа
5 - Со
То есть, если у нас есть файл *.wav (допустим Notes.wav), играющий ноты "До, Рэ, Ми, Фа, Со", то он состоит из байтов "12345".

Теперь вот что мы делаем, постам в соответствие каждой последовательности байтов, определяющей, ту или иную ноту, определенный символ, который можно записать в текстовый файл.
1(До)=а
2(Рэ)=б
3(Ми)=в
4(Фа)=г
5(Со)=д

Запишем эти символы в текстовик и дадим ему имя Text.txt, получится, что звуковому файлу Notes.wav будет соответствовать текстовый файл Text.txt.
Поместим этот текстовый файл на сервер, откуда его скачают на огромной скорости, а затем по тому же алгоритму сгенерируют исходный звуковой файл.
То есть они качают текстовик, а затем интерпретируют его в звуковой файл.

Если такое возможно, то это замечательно.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Чудес не бывает Lei fang :) Делаю предположение, что некий более или менее высокий уровень сетевого протокола использует тот или иной метод сжатия перед передачей файла. Это объясняет картинку. Ведь текстовые файлы без проблем сжимаются даже элементарными пакерами в 3-4 раза в то время как JPG, например, не сжимаются вообще. Вот я вся загадка. Если попытаться перегнать мультимедиа файл в текстовик, используя какие-то правила, то размер текствого файла заведомо окажется намного больше (хотя бы потому, что будет использоваться исбыточное кодирование), так что даже после сжатия такой файл будет качаться дольше, чем исходный мультимедиа файл.
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Lei fang
Сообщения: 49
Зарегистрирован: 28 май 2005, 21:25
Откуда: Саратов
Контактная информация:

Эх... жаль. Так хотелось хоть как-нибудь увеличить скорость закачки файлов.
А от ускорителей работы модема (modem booster, internet accelerator и т. д.) есть какой-нибудь толк?
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Без понятия. Меня такие проблемы не интересуют. У нас выделенка. :)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Lei fang
Сообщения: 49
Зарегистрирован: 28 май 2005, 21:25
Откуда: Саратов
Контактная информация:

Если попытаться перегнать мультимедиа файл в текстовик, используя какие-то правила, то размер текствого файла заведомо окажется намного больше (хотя бы потому, что будет использоваться исбыточное кодирование), так что даже после сжатия такой файл будет качаться дольше, чем исходный мультимедиа файл.
Да... это, действительно так, но что если затем перегнать и архив в текствик, затем его сжать (полученный текстовик) и так далее. А текстовики сжимаются значительно больше, чем 3 - 4 раза.

На мой взгляд, метод сжатия перед передачей файла не объясняет скорости передачи.

И, кстати, чудеса бывают...
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Молодой человек у вас какое образование? Вы имеете понятие об информативной ёмкости данных? Вас не смущает то, что архивы невозможно зжать повторно? Получается действуя вашим алгоритмом, сделав N-ое количество итераций можно сжать ЛЮБОЙ размер данных, например, до одного байта? :D Дедушка Фурье бы перевернулся в могиле узнав о таких вещах :)
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Ответить