Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2016, 18:20   #1
Strizhonok15
 
Регистрация: 26.11.2015
Сообщений: 5
По умолчанию Магические числа GZipStream C#

Здравствуйте, Проблема в следующем. Я пишу архиватор, который выполняет работу в многопоточном режиме по типу конвейера. Я считываю блок сразу передаю на конвертацию и потом на запись в файл, проблема в том, что так как конвертирование идет блоками, то в каждом блоке GZIPSTREAM записывает свои магические числа, как результат-лишняя информация в архиве и невозможность распаковки, так как для корректной распаковки придется делить на блоки по этим магичесикм числам, что требует затрат лишнего времени. Помогите идеей, как можно организовать так, чтобы эти числе не записывались в каждый блок, или как быстро разделить на эти блоки при распаковке.
Strizhonok15 вне форума Ответить с цитированием
Старый 07.06.2016, 18:41   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

делите все в OutputStream что передаете ему.(точнее что ему GZipStream отдаст)
(да придется свой враппер написать)
итого у вас выйдет одна сессия сжатия на входной поток, а не на блок.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.06.2016, 18:49   #3
Strizhonok15
 
Регистрация: 26.11.2015
Сообщений: 5
По умолчанию

А это намного больше времени должно занять?
Strizhonok15 вне форума Ответить с цитированием
Старый 07.06.2016, 18:52   #4
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

быстрее чем ваш текущий метод.
только не разбивайте входящие данные на блоки, архиваторы это не любят(понижение скорости, понижение степени сжатия), это не хеширование.
оперируйте только выходными.
соотственно вам нужны будут все выходные блоки в том же порядке, это решается своим входным потоком.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.06.2016, 18:54   #5
Strizhonok15
 
Регистрация: 26.11.2015
Сообщений: 5
По умолчанию

Тогда в чем будет суть моей многопоточности, если я должна сразу все блоки передавать?
Strizhonok15 вне форума Ответить с цитированием
Старый 07.06.2016, 18:57   #6
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

если вам нужно строго дробить входные данные, то иного метода кроме вашего нет.
оверхед будет.
многопоточность еще можно обеспечить вширь, а именно при архивировании нескольких файлов.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 07.06.2016, 20:18   #7
Strizhonok15
 
Регистрация: 26.11.2015
Сообщений: 5
По умолчанию

Да, вот и получается замкнутый круг( к сожалению многопоточность нужно обеспечить для одного файла
Strizhonok15 вне форума Ответить с цитированием
Старый 07.06.2016, 20:20   #8
Strizhonok15
 
Регистрация: 26.11.2015
Сообщений: 5
По умолчанию

А можно при предложенном вами методом работать с файлами, размер которых больше оперативки?
Strizhonok15 вне форума Ответить с цитированием
Старый 07.06.2016, 21:59   #9
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

это можно делать в любом методе.
GZipStream не заставляет считывать все за один раз.
он отлично примет и несколько Write и CopyTo даже.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Создать программу,имеющая процедуру,кторая в производном текстовом файле,которая имеет слова и числа,изменяющая все числа числа,ме Fingergod Паскаль, Turbo Pascal, PascalABC.NET 0 13.12.2012 20:08
Задачи в ТурбоПаскаль: найти числа Армстронга и просуммировать числа в последовательности номера которых простые числа Lena1808 Помощь студентам 1 17.05.2012 08:00
Простой код и магические ошибки? tq404 Помощь студентам 2 17.01.2012 04:48
Магические действа Rabbit-PGN C/C++ Сетевое программирование 0 30.11.2011 21:00
Магические кавычки (magic quotes) Linel PHP 5 12.02.2010 14:21