逐字节读取和处理大型易失性内存文件

Posted

技术标签:

【中文标题】逐字节读取和处理大型易失性内存文件【英文标题】:Reading and processing large volatile memory file byte by byte 【发布时间】:2017-04-02 00:17:30 【问题描述】:

我目前正在使用 python 处理由 belkasoft、ftk imager 等应用程序创建的内存转储,它们的扩展名通常为 .mem 或 .dmp,格式为:

53 FF 00 F0 53 FF 00 

我想可视化这些数据,比如说使用热图或使用曲线,可能会尝试可视化每个字节。如果是 2GB 文件,它将是 2147483648 字节。 您将如何读取和处理这种 >= 2GB 的大文件

我一直在尝试类似的东西:

with open("File.mem",'rb') as file:
    byte = file.read(1)
    while byte:
         Do something

并设法进行了一些计算,但速度非常慢 我还尝试逐行读取文件,这很快,但再次读取每一行的字节并进行一些转换也非常缓慢。 我也读过一些关于 numpy loadtxt 的文章,但没有做太多实验,我想先在这里问。

有什么想法可能适合这种情况并提高效率吗?

非常感谢

【问题讨论】:

【参考方案1】:

读取大文件的常用方法是使用 mmap。文件内容映射到您的进程内存空间,您可以通过从 RAM 读取数据来访问它。操作系统负责将所需数据加载到 RAM 中。这类似于交换文件的工作方式。操作系统知道数据在文件中,并在您访问它时动态加载它。如果操作系统需要内存用于其他目的,它也可以从 RAM 中卸载数据,因为它总是可以从文件中再次加载它。

看看mmappython模块。

【讨论】:

非常感谢,我已经尝试过了,它非常快,非常感谢。

以上是关于逐字节读取和处理大型易失性内存文件的主要内容,如果未能解决你的问题,请参考以下文章

这个 MSDN CompareExchange 示例如何不需要易失性读取?

如何逐行读取大型文本文件,而不将其加载到内存中?

非易失性MRAM诞生过程

将易失性数组与非易失性数组进行比较

智能卡:非易失性存储器的状态已更改 - 0x6581

易失性和缓存行为