代码之家  ›  专栏  ›  技术社区  ›  Recursion

数据雕刻循环改进

  •  1
  • Recursion  · 技术社区  · 15 年前

    我目前正在开发一个python应用程序,它将为jpeg文件数据雕刻一个块设备。假设它有时工作,有时不工作。我创建它是为了读取块设备,直到找到一个ffd8,然后我保持流打开,通过循环搜索ffd9闭包。尽管我总是需要考虑所有的ffd9闭包,即使在第一个闭包之后。所以这是一个非常密集的手术。假设一个设备有25个jpeg以及许多其他数据,那么这个循环非常引人注目,而且运行起来也非常频繁。

    这个项目不是世界上最慢的项目,但我认为它可以更快更有效。我正在寻找一种更好的方法来搜索块设备并以更有效的方式提取数据。我也不想杀死硬盘或保存块设备图像的驱动器。

    那么,是否有人知道一种更好的方法来系统地处理数据的搜索和提取?

    1 回复  |  直到 15 年前
        1
  •  2
  •   Jonathan Leffler    15 年前

    直接读取块设备的问题是不能保证任何给定文件的块是连续的。这意味着,即使您在块13中找到了神奇标记字节0xffd8,也不能保证块14属于同一个文件,不管它是否包含0xffd9结束标记。(大多数文件将从块边界开始;文件的结尾可能位于任何位置,甚至可能跨越块边界。)

    处理它的更好方法是什么?好吧,这取决于您在寻找什么——但是如果您只查看当前分配的块,那么使用POSIX C函数ftw(nftw)的python模拟扫描文件系统,然后依次读取每个文件。这在自由列表中找不到删除的jpeg文件的证据-如果这是您所追求的,那么您将需要做的,或多或少,但将这些信息与您在文件系统中找到的内容相关联。绘制这些图块(充其量)是困难的。