数据雕刻循环改进

时间:2010-01-07 04:28:51

标签: python io

我目前正在开发一个Python应用程序,它将为jpeg文件创建一个块设备。我们只是说它有时有效,有时则无效。我已创建它,以便我读取块设备,直到找到ffd8,然后我保持流打开并通过循环搜索ffd9闭包。虽然我总是需要考虑所有ffd9关闭,即使在第一次之后。所以它往往是一个非常密集的操作。假设一个设备让我们说25个jpeg以及许多其他数据,那么循环非常引人注目并且运行很多。

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

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

1 个答案:

答案 0 :(得分:2)

直接读取块设备的麻烦在于无法保证任何给定文件的块是连续的。这意味着即使您在块13中找到了您的魔术标记字节0xFFD8,也就是说,无法保证块14属于同一文件,无论它是否包含0xFFD9结束标记。 (大多数文件将从块边界开始;文件的末尾可能在任何地方,甚至可能跨越块边界。)

处理它的更好方法是什么?好吧,这取决于你所追求的 - 但如果你只查看当前分配的块,那么使用POSIX C函数ftw(nftw)的Python模拟扫描文件系统,并依次读取每个文件。这不会在空闲列表中找到已删除的JPEG文件的证据 - 如果这就是你所追求的,那么你或多或少需要做你正在做的事情,但是将这些信息与你在文件系统中找到的信息联系起来正确。映射这些块(最好)很难。