Улучшения цикла вырезания данных - PullRequest
1 голос
/ 07 января 2010

В настоящее время у меня есть приложение Python, которое я разрабатываю, которое будет обрабатывать данные как блочные устройства для файлов jpeg. Скажем так, иногда это работает, а иногда нет. Я создал его так, что я читаю блочное устройство до тех пор, пока не найду ffd8, затем оставлю поток открытым и перебираю циклический поиск закрытия ffd9. Хотя мне всегда нужно учитывать все замыкания ffd9 даже после первого. Так что это, как правило, очень интенсивная операция. Учитывая устройство с, скажем, 25 jpegs, а также множество других данных, зацикливание является довольно драматичным, и он работает хотя и много.

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

Так кто-нибудь знал о лучшем способе систематического управления поиском и извлечением данных?

1 Ответ

2 голосов
/ 07 января 2010

Проблема с чтением блочного устройства напрямую заключается в том, что нет гарантии, что блоки любого данного файла являются смежными. Это означает, что даже если вы найдете ваши магические маркеры байтов 0xFFD8 в блоке 13, скажем, нет гарантии, что блок 14 принадлежит одному и тому же файлу, независимо от того, содержит ли он маркер конца 0xFFD9 или нет. (Большинство файлов начинается с границы блока; конец файла может находиться где угодно, возможно, даже за границами блока.)

Какой лучший способ справиться с этим? Ну, это зависит от того, что вы ищете - но если вы смотрите только на выделенные в данный момент блоки, то просканируйте файловую систему, используя Python-аналог функции POSIX C ftw (nftw), и прочитайте каждый файл по очереди. Это не найдет доказательств удаленных файлов JPEG в бесплатном списке - если это то, что вам нужно, то вам нужно будет делать то, что вы делаете, более или менее, но соотносить эту информацию с тем, что вы найдете в файловой системе. собственно. Отображение этих блоков будет (в лучшем случае) трудным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...