主要内容

memmapfile

创建到文件的内存映射

描述

例子

=memmapfile(文件名映射现有文件,文件名,并返回内存映射,

内存映射是一种机制,它将磁盘上文件的一部分或整个文件映射到MATLAB中的一系列内存地址®地址空间。然后,MATLAB可以像访问动态内存一样访问磁盘上的文件,加快文件的读写速度。内存映射允许您像处理MATLAB数组一样处理文件中的数据。

例子

=memmapfile(文件名名称,值指定的属性使用一个或多个名称-值对参数。例如,可以指定文件中数据的格式。

例子

全部折叠

在命令提示符下,在当前文件夹中创建一个名为记录.dat,内有10个uint8价值观。

myData = uint8(1:10)”;文件标识= fopen (“records.dat”' w ');fwrite(文件ID、myData、,‘uint8’);fclose(fileID);

为创建一个地图记录.dat.当使用memmapfile,默认数据格式为uint8所以文件名是本例中唯一需要的输入参数。

m = memmapfile (“records.dat”
m = Filename: 'd:\matlab\records.dat' Writable: false Offset: 0 Format: 'uint8' Repeat: Inf Data: 10x1 uint8数组

MATLAB绘制了整个记录.dat文件到内存,将内存映射的所有属性设置为默认值。内存映射被赋给变量,。在本例中,该命令将整个文件映射为一个无符号8位整数序列,并为调用方提供对其内容的只读访问权限。

通过访问。查看映射的数据数据的属性

m.Data
Ans = 1 2 3 4 5 6 7 8 9 10

为双精度数据创建内存映射。在指定其他数据类型时,语法类似。

在命令提示符下,在当前文件夹中创建一个名为记录.dat,内有10个价值观。

myData=(1:10)';fileID=fopen(“records.dat”' w ');写入文件(文件标识,myData,“双”);fclose(fileID);

创建一个内存映射记录.dat,并设置格式属性的输出“双”

m = memmapfile (“records.dat”“格式”“双”) ;

memmapfile,,包含以下属性:文件名可写抵消格式重复,及数据。以显示任何一个属性,例如格式、类型m、 格式在命令窗口中。

m、 格式
ans =“双”

数据属性中包含10个双精度值记录.dat

创建一个大数组的内存映射int32数据。指定写访问权限和非默认值格式抵消价值观。

在命令提示符下,在当前文件夹中创建一个名为记录.dat包含10000int32价值观。

myData = int32 ((1:1));文件标识= fopen (“records.dat”' w ');写入文件(文件标识,myData,“int32”);fclose(fileID);

创建一个内存映射记录.dat,并设置格式属性的输出int32.同时,设置抵消属性忽略文件中的前9000字节,而可写属性允许写访问。

m = memmapfile (“records.dat”...“抵消”, 9000,...“格式”“int32”...“可写的”,对);

一个抵消的价值9000的前9000字节记录.dat没有映射。

键入内存映射的名称以查看所有属性的当前设置。

m = Filename: 'd:\matlab\records.dat' Writable: true Offset: 9000 Format: 'int32' Repeat: Inf Data: 7750x1 int32数组

格式属性表示通过内存映射执行的任何读或写操作都以有符号32位整数序列的形式读写文件内容。这个数据属性只包含7750个元素,因为记录.dat,表示文件中的前2250个值,未映射。

属性查看映射数据的前5个元素数据的属性

m、 数据(1:5)
ans=2251 2252 2253 2254 2255

为包含100个双精度值的文件区域创建内存映射。

在命令提示符下,在当前文件夹中创建一个名为mybinary.bin,包含100个双精度值。

rng (“默认”) randData = rand([100,1]);文件标识= fopen (“mybinary.bin”' w ');fwrite(文件ID、随机数据、,“双”);fclose(fileID);

中的前75个值mybinary.bin到一个双精度值的5 × 5 × 3数组,该数组可以在内存映射的结构中使用字段名引用x.属性指定这些参数格式名称-值对的论点。

m = memmapfile (“mybinary.bin”...“格式”,{“双”,[5 5 3],“x”})
m=Filename:'d:\matlab\mybinary.bin'可写:错误偏移量:0格式:{'double'[5 5 3]'x'}重复:Inf数据:1x1结构数组,带字段:x

数据属性是一个结构数组,其中包含字段中的映射值,x

将映射数据赋给一个变量,一个.因为数据属性是结构数组,则必须在字段中建立索引,x,以访问数据。

一个= m.Data.x;

查看有关的信息一个

一个
名称大小字节类属性A 5x5x3 600双精度

将具有不同阵列形状和数据类型的文件段映射到内存。

在命令提示符下,在当前文件夹中创建一个名为mybinary.bin. 写uint16数据和双精度数据代表样品的压力,温度,和体积值进入文件。在这个例子中,每个uint16数组是50乘1,双精度数组是5乘10。k是一个样本比例因子。

rng (“默认”) k = 8.21;pres1 =兰迪([1300],[50,1],“uint16”);temp1 =兰迪([1300],[50,1],“uint16”);vol1 =双(重塑(k * temp1. / pres1 5 10));pres2 =兰迪([5500],[50,1],“uint16”);temp2=randi([5500],[50,1],“uint16”);影响=双(重塑(k * temp2. / pres2 5 10));文件标识= fopen (“mybinary.bin”' w ');fwrite(文件ID,pres1,“uint16”);fwrite(文件ID,temp1,“uint16”);vol1写入文件(文件标识,“双”);pres2写入文件(文件标识,“uint16”);fwrite(文件ID,temp2,“uint16”); fwrite(文件ID,第2卷,“双”);fclose(fileID);

将文件映射到可通过唯一名称访问的数组。定义一个字段,压力,包含一个50乘1的数组uint16值,后跟一个字段,温度,含50×1uint16价值观。定义一个字段,体积,包含一个5乘10的双精度值数组。使用单元格数组来定义映射区域的格式,并重复该模式两次。

m = memmapfile (“mybinary.bin”...“格式”,{“uint16”50 [1],“压力”...“uint16”,[50,1],“温度”...“双”,[5,10],“体积”},“重复”, 2)
m = Filename: 'd:\matlab\mybinary.bin' Writable: false Offset: 0 Format: {'uint16' [50 1] 'pressure' 'uint16' [50 1] 'temperature' ' 'double' [5 10] 'volume'} Repeat: 2 Data: 2x1 struct array with fields: pressure temperature volume . m = Filename: 'd:\matlab\mybinary.bin' Writable: false Offset: 0 Format: {'uint16' [50 1] 'pressure' 'uint16' [50 1] 'temperature' [5 10] 'volume'

数据内存映射的属性,,是一个2乘1结构数组,因为格式应用两次。

复制数据属性设置为变量,一个.然后,查看的最后一块数据,您可以使用字段名访问它,体积

一个= m.Data;(2) .volume myVolume =
myVolume=2133251632829538131923852120291061258201171515181818181414148402863

输入参数

全部折叠

要映射的文件名,包括文件扩展名,指定为字符向量或字符串标量。的文件名参数不能包含任何通配符(例如,).

例子:“myFile.dat”

数据类型:字符|一串

名称-值参数

指定可选的逗号分隔的对名称,值参数。名字参数名和价值观是对应的值。名字必须出现在引号内。可以以任意顺序指定多个名称和值对参数Name1, Value1,…,的家

例子:m=memmapfile('myFile.dat','Format','int32','Offset',255)地图int32文件中的数据,myFile.dat,从第256字节开始到内存。

写权限,指定为真的.如果您指定,映射的区域是只读的。如果您指定真的,映射的区域同时具有读取和写入权限。

例子:“可写”,没错

数据类型:逻辑

从文件开始到映射区域开始的距离,指定为非负整数。这个值是基于零的,值0表示文件的开始。

例子:1024年“抵消”

数据类型:

映射区域的格式,指定为字符向量、字符串标量或n3单元阵列。

如果要映射的区域只包含一种类型的数据,请将Format值指定为标识该类型的字符向量或字符串标量。例如,如果数据仅由16位有符号整数组成,则指定“int16”.可以使用下列任意数据类型格式价值:

  • “int8”

  • “int16”

  • “int32”

  • “int64”

  • ‘uint8’

  • “uint16”

  • “uint32”

  • “uint64”

  • “单一”

  • “双”

如果要映射的区域需要指定映射文件中数据的数组形状以及引用此数组的字段名,请指定格式值为1 × 3单元格数组。

  • 指定为字符向量或字符串标量的第一个单元格值指定要应用于映射区域的数据类型。

  • 第二个单元格值指定为1×n数组,指定要应用于映射区域的数组维度。

  • 属性中指定为字符向量或字符串标量的第三个单元格值分配要使用的字段名数据构造内存映射的数组。例如,{“uint64”,[30 4 10],' x '}

如果要映射的区域由不同数据类型或数组形状的段组成,则可以使用n × 3单元格数组的行指定每个段的格式。例如,{'uint64',[30 4 10],'x';'uint32',[30 4 6],'y'}

数据类型:字符|一串|细胞

应用程序的次数格式映射区域的参数,指定为或者一个正整数。如果您指定memmapfile应用格式参数,直到文件结束。

例子:“重复”,2000年

数据类型:

输出参数

全部折叠

内存映射,返回为memmapfile对象具有以下属性。

财产 描述

文件名

映射文件的路径和名称

可写

允许对映射区域进行访问的类型

抵消

从文件开始到映射区域开始的字节数

格式

映射区域的内容格式,包括用于访问数据的数据类型、数组大小和字段名

重复

属性指定的应用模式的次数格式属性设置为文件的映射区域

数据

文件的内存映射数据。数据属性中指定的字段名可以是数字数组或结构数组格式财产

任何属性的值(除数据)在您呼叫时设置memmapfile,使用名称-值对参数。

访问的任何财产点表示法类似于访问结构数组的字段。例如,要访问内存映射数据数据属性,执行以下操作之一:

  • 如果数据是一个数字数组,调用m.Data

  • 如果数据是一个标量(1乘1)结构数组,调用m.Data。字段名,在那里字段名字段的名称。

  • 如果数据是非标度结构数组,调用m.Data (指数).字段名哪里指数结构数组中元素的索引是和吗字段名字段的名称。例如,要访问温度字段的第一个元素的字段数据,叫均m.Data (1)

在你创建了一个内存映射之后,,您可以更改其任何属性的值,除了数据.要赋新值,请使用点表示法。例如,设置一个新的抵消类型:

m、 偏移量=2048;

提示

  • 只能映射已存在的文件。您不能在一次操作中创建一个新文件并将该文件映射到内存。在尝试将文件映射到内存之前,使用MATLAB文件I/O函数来创建文件。

  • 之后memmapfile定位文件,MATLAB在内部存储文件的绝对路径名,然后使用该存储路径从该点定位文件。因此,您可以在当前工作目录之外的其他目录中工作,并保留对映射文件的访问权限。

  • memmapfile不展开或附加到映射文件。请改用标准文件I/O函数,如福彭写入文件

算法

文件到MATLAB地址空间的实际映射并不发生在构造memmapfile根据当前存储在映射对象中的信息,在您第一次引用或修改对象时会生成内存映射数据该对象的属性。

在R2006a之前引入