主要内容

将文件映射到内存

创建一个简单的内存映射

假设您想为一个名为records.dat,使用memmapfile函数。

创建一个名为records.dat,包含5000个值。

rng (“默认”) myData = rand([5000,1]);fileID = fopen(“records.dat”' w ');写入文件(文件标识,myData,“双”);文件关闭(文件标识);

接下来,创建内存映射。使用格式名称-值对参数指定值为类型.使用可写的名称-值对参数允许对映射区域进行写访问。

M = memmapfile(“records.dat”...“格式”“双”...可写的,真正的)
m =文件名:'d:\matlab\records.dat'可写:true偏移量:0格式:'double'重复:Inf数据:5000x1双数组

MATLAB®创建一个memmapfile对象,.的格式属性指示对映射区域的读和写操作将文件中的数据视为双精度数序列。的数据属性包含文件中的5000个值,records.dat.您可以更改任何属性的值,除了数据,创建内存映射后,

例如,改变内存映射的起始位置,.属性的值从文件开始的1024字节处开始映射区域抵消财产。

m.Offset = 1024
m =文件名:'d:\matlab\records.dat'可写:true偏移量:1024格式:'double'重复:Inf数据:4872x1双数组

无论何时更改内存映射属性的值,MATLAB都会将文件重新映射到内存。的数据属性现在只包含4872个值。

指定映射数据的格式

默认情况下,MATLAB将映射文件中的所有数据视为无符号8位整数序列。但是,您的数据可能是不同的数据类型。当你打电话给memmapfile函数,使用格式名称-值对参数来指示另一种数据类型。的价值格式可以是标识整个映射区域中使用的单个类的字符向量,也可以是指定多个类的单元格数组。

假设映射一个长度为12千字节的文件。从这个文件读取的数据可以被视为6000个16位(2字节)整数的序列,或者1500个8字节双精度浮点数,仅举几个例子。您还可以将此数据作为不同类型的组合来读取:例如,将4000个8位(1字节)整数与1000个64位(8字节)整数一起读取。属性,可以确定MATLAB如何解释映射数据格式属性的内存映射memmapfile函数。

MATLAB数组以列为主的顺序存储在磁盘上。数组元素的序列是第1列,第1行;第一列,第二行;第1列,最后一行;第2列,第1行,等等。当通过内存映射读写数组元素时,可能需要转置或重新排列数组元素的顺序。

映射多个数据类型和数组

如果要映射的区域由不同数据类型或数组形状的段组成,则可以为每个段指定单独的格式。属性的值格式名称-值对参数n-by-3单元格数组,其中n是段数。单元格数组中的每一行都对应一个段。行中的第一个单元格标识要应用于映射段的数据类型。第二个单元格包含应用于段的数组尺寸。第三个单元格包含用于引用那段的字段名。对于内存映射,,使用以下语法:

M = memmapfile(文件名,...“格式”,{...Datatype1,维度1,fieldname1;...Datatype2,维度s2, fieldname2;...:::...datatypeN, dimensionsN, fieldnameN})

假设您有一个长度为40,000字节的文件。下面的代码映射从第2048字节开始的数据。的格式Value是一个3 × 3单元格数组,将文件数据映射到三个不同的类:int16uint32,

M = memmapfile(“records.dat”...“抵消”, 2048,...“格式”,{...“int16”(2 - 2)“模型”...“uint32”[1]“serialno”...“单一”3 [1]“费用”});

在这种情况下,memmapfile地图的int16数据作为2 × 2矩阵,您可以通过字段名访问,模型.的uint32数据是通过字段名访问的标量值,serialno.的Data是一个1 × 3矩阵费用.每个字段都属于800 × 1结构数组,m.Data

该图显示了示例文件的映射。

下一个图更紧密地显示了数组元素的顺序。特别地,它说明了MATLAB数组是按列-主顺序存储在磁盘上的。映射文件中数组元素的顺序为第1行,第1列;第二行,第一列;第一行,第2列;第二行第二列。

如果文件中的数据不是按此顺序存储的,那么在通过内存映射进行读写时,可能需要调换或重新排列数组元素的顺序。

选择要映射的文件

的值文件名属性在构造后的任何时间memmapfile对象。如果你想这样做:

  • 你想用同样的memmapfile对象在多个文件上执行。

  • 你保存你的memmapfile对象到一个mat文件,然后在映射文件已经移动到另一个位置的环境中将其加载回MATLAB中。的路径段文件名来表示新的位置。

中的路径更新文件名属性用于使用点表示法的内存映射。例如,要指定一个新路径,f: \测试文件\ records.dat对于内存映射,类型:

m.Filename =f: \测试文件\ records.dat”

另请参阅

相关的话题