Cryingangel, библиотека для распаковки самого алгоритма RAR моя собственная, написанная на основе исходников на C++. Код для распаковки PPMd и реализацию виртуальной машины я позаимствовал из junrar, собственно, поэтому оно работает кривее, чем мой код. Я хотел сам написать PPMd как надо, с динамическим выделением памяти, но там все так написано, что заняло бы слишком много времени. А в junrar уже сделали, правда, увы, просто в лоб. Требования к памяти относительно PPMd точно можно уменьшить, вернее, сделать сообразными размеру конкретного файла. То же можно сказать относительно виртуальной машины. А вот в RAR вряд ли что выйдет. В MobileRAR все ограничения искусственные, потому все и не распаковывает.
Malcolm, спасибо за ответ! да ещё и подробный:) с виртуальной машиной, и алгоритмом PPMd,- понятно, в исходниках есть одноименные пакеты, а собственно RAR- это пакет *.unpack;. вообщем, все стало немного понятней
Виртуальную машину в том виде, как она есть, можно, кстати, вполне спокойно ампутировать, за исключением пары кодов. Дело в том, что теоретически она нужна для того, чтобы можно было писать собственные фильтры для данных. На практике же я такого чуда не видел, и через нее просто запускаются встроенные фильтры. Так что если все это дело сократить до вызова встроенных фильтров, функциональность не особенно пострадает. Максимум, что произойдет - не будут открываться какие-то экзотические архивы с собственными фильтрами. Вообще, учитывая, что архивы создаются только самим RAR, и поэтому с незнакомым фильтром ну никак не получится столкнуться, зачем автору понадобилось вносить такие сложности, я, ей Богу, не знаю.
При попытке создать архив, при стандартных параметрах PowerGrasp-та, выскакивает ошибка (лог выложил). Происхит эта ерунда примерно при запаковке 8-9-го файла, при выходе из проги, не одного файла, не наблюдается. А вообще, за всё время что я, пользуюсь программой (около 2 лет), это чуть ли не вторая-третья ошибка. Спасибо, за отличную программу!!!
Malcolm, подскажи, почему архив в 15мб распаковывает нормально, всмысле памяти хватает, а вытянуть из архива html файл весом в 990кб не может. На 132кб выскакивает ошибка PPM. В настройках стоит 2МиБ.
Malcolm, спасибо, виртуальную машину уже начал "распиливать":) Ещё один вопрос- при распаковке junrar"ом некоторых PE-файлов выдает ошибку CRC. В граспе- всё отлично. Я подумал, дело в X86-фильтре. не подскажешь в чем проблема?
Funtik-nik, а можешь написать, на каком файле запинается? Кстати, ты включал уровень лога FINE? Не пойму, то ли у тебя низкий уровень, то ли я добавил маловато отладочной информации. А ошибка, судя по всему, из-за того, что какой-то файл с необычным путем к нему. Ssm2OO7, именно из-за PPM и не получается. Видимо, нужно выделять больше 2 МиБ, насколько - шут его знает, PPMd жрет как прорва. Cryingangel, по-моему, там у них где-то была ошибка, которую я исправил. Но, где именно, сейчас не вспомню, так что советую просто посмотреть тот же код на C++ и проверить код на Java.
Malcolm, насчёт файла, это проблемно, их та аж 728 папок 26 (форматы: dos, inf, ini, txt разер: 592кб), и с каково начинается запаковка, мне, неведомо. Может быть, баг возникает из-за слишком длинных имён файлов? Щя, на компе попробую в виде эксперимента, изменить их имена на порядковые номера. Лог был на INFOB-) , сейчас переставлю на FINE и скину новый лог.
ts 29 мая 2010 в 11:22
Требования к памяти относительно PPMd точно можно уменьшить, вернее, сделать сообразными размеру конкретного файла. То же можно сказать относительно виртуальной машины. А вот в RAR вряд ли что выйдет. В MobileRAR все ограничения искусственные, потому все и не распаковывает.