假设您想为一个名为records.dat
,使用memmapfile
函数。
创建一个名为records.dat
,包含5000个值。
rng (“默认”) myData = rand([50001]);文件标识= fopen (“records.dat”,' w ');写入文件(文件标识,myData,“双”);文件关闭(文件标识);
接下来,创建内存映射。使用格式
名称-值对参数,以指定值的类型双
.使用可写的
名称-值对参数,以允许对映射区域的写访问。
m = memmapfile (“records.dat”,...“格式”,“双”,...可写的,真正的)
m = Filename: 'd:\matlab\records.dat' Writable: true Offset: 0 Format: 'double' Repeat: Inf Data: 5000x1 double数组
MATLAB®创建一个memmapfile
对象,米
.的格式
属性指示对映射区域的读写操作将文件中的数据视为双精度数字序列。的数据
属性包含文件中的5000个值,records.dat
.您可以更改任何属性的值,除了数据
,在创建内存映射后,米
.
例如,改变内存映射的起始位置,米
.属性的值使映射区域从文件开始的1024字节开始抵消
财产。
m.Offset = 1024
m = Filename: 'd:\matlab\records.dat' Writable: true Offset: 1024 Format: 'double' Repeat: Inf Data: 4872x1 double array . log . log . log . log
当你改变内存映射属性的值时,MATLAB会将文件重新映射到内存中。的数据
属性现在只包含4872个值。
默认情况下,MATLAB认为映射文件中的所有数据都是无符号8位整数序列。但是,您的数据可能是不同的数据类型。当你呼叫memmapfile
功能,使用格式
名称-值对参数,以指示另一种数据类型。的价值格式
可以是标识整个映射区域中使用的单个类的字符向量,也可以是指定多个类的单元格数组。
假设映射一个长度为12千字节的文件。从该文件中读取的数据可以被视为一个由6,000个16位(2字节)整数组成的序列,或者作为1,500个8字节双精度浮点数(仅举几个例子)来处理。您还可以将此数据作为不同类型的组合来读取:例如,作为4,000个8位(1字节)整数后面跟着1,000个64位(8字节)整数。您可以确定MATLAB将如何解释映射数据通过设置格式
的内存映射属性memmapfile
函数。
MATLAB数组以列主顺序存储在磁盘上。数组元素的序列是第1列,第1行;第1列,第2行;第1列,最后一行;第二列,第一行,等等。通过内存映射进行读写时,可能需要对数组元素进行转置或重新排列顺序。
如果要映射的区域包含不同数据类型或数组形状的段,则可以为每个段指定单独的格式。的值格式
名称-值对参数作为n
-by-3 cell array,其中n
为段的个数。单元格数组中的每一行对应一个段。行中的第一个单元格标识要应用到映射段的数据类型。第二个单元格包含应用于段的数组维数。第三个单元格包含用于引用该段的字段名。对于内存映射,米
,使用以下语法:
m = memmapfile(文件名,...“格式”, {...datatype1、dimensions1 fieldname1;...datatype2、dimensions2 fieldname2;...:::...datatypeN、dimensionsN fieldnameN})
假设您有一个长度为40000字节的文件。下面的代码映射从2048字节开始的数据。的格式
Value是一个3乘3的单元格数组,它将文件数据映射到三个不同的类:int16
,uint32
,单
.
m = memmapfile (“records.dat”,...“抵消”, 2048,...“格式”, {...“int16”(2 - 2)“模型”;...“uint32”[1]“serialno”;...“单一”3 [1]“费用”});
在这种情况下,memmapfile
地图的int16
数据是一个2乘2的矩阵,可以使用字段名访问,模型
.的uint32
Data是使用字段名访问的标量值,serialno
.的单
Data是一个1 × 3的矩阵费用
.这些字段都属于800乘1的结构数组,m.Data
.
该图显示了示例文件的映射。
下一个图更接近数组元素的顺序。特别地,它说明了MATLAB数组是按列主顺序存储在磁盘上的。映射文件中的数组元素序列为第1行第1列;第2行第1列;第1行,第2列;第二行第二列。
如果文件中的数据不是按这个顺序存储的,那么在通过内存映射进行读写时,可能需要调换或重新排列数组元素的顺序。
的值可以更改文件名
属性的memmapfile
对象。你可能想这样做,如果:
你想用同样的memmapfile
对象在多个文件上。
你拯救你memmapfile
对象加载到mat文件中,然后在映射文件已移动到不同位置的环境中将其加载回MATLAB。的路径段文件名
表示新位置。
中的路径更新文件名
属性使用点符号表示内存映射。例如,要指定一个新路径,f: \测试文件\ records.dat
对于内存映射,米
类型:
m.Filename =f: \测试文件\ records.dat”