数据雕刻循环改进

1 投票
1 回答
963 浏览
提问于 2025-04-15 17:43

我现在正在开发一个Python应用程序,目的是从一个块设备中提取jpeg文件。简单来说,这个程序有时候能正常工作,有时候又不行。我设计的方式是先读取这个块设备,直到找到一个特定的标记(ffd8),然后我保持这个读取的状态,继续循环查找另一个标记(ffd9),这个标记表示文件的结束。不过,我必须考虑到所有的ffd9标记,即使是第一个之后的那些。因此,这个过程通常非常耗费资源。假设这个设备里有25个jpeg文件,还有很多其他数据,循环查找的过程就显得特别复杂,而且消耗很多时间。

这个程序并不是世界上最慢的,但我觉得它可以更快、更高效。我在寻找一种更好的方法来搜索这个块设备,并以更有效的方式提取数据。我也不想让硬盘或存储块设备镜像的驱动器受到损害。

所以,有没有人知道更好的方法来系统地处理数据的搜索和提取呢?

1 个回答

2

直接读取块设备的问题在于,无法保证任何文件的块是连续的。也就是说,即使你在第13个块找到了神奇的标记字节0xFFD8,也不能保证第14个块属于同一个文件,不管它是否包含0xFFD9结束标记。(大多数文件会从一个块的边界开始,但文件的结束位置可能在任何地方,甚至可能跨越多个块的边界。)

那有什么更好的处理方法呢?这要看你想要什么。如果你只关注当前已分配的块,那么可以使用Python中的类似于POSIX C函数ftw(nftw)的方式来扫描文件系统,逐个读取文件。不过,这样做无法找到已删除的JPEG文件在空闲列表中的证据。如果你想找到这些文件,那你就需要像现在这样做,但还要把这些信息和文件系统中的内容关联起来。映射这些块(最多)会很困难。

撰写回答