Создайте карту памяти в файл
сопоставляет существующий файл, m
= memmapfile(filename
)filename
, в память и возвращает карту памяти, m
.
Размещение в ОЗУ является механизмом, который сопоставляет фрагмент файла или всего файла на диске с областью значений адресов памяти в MATLAB® адресное пространство. Затем MATLAB может получить доступ к файлам на диске таким же образом, как и к динамической памяти, ускоряя чтение и запись файлов. Размещение в ОЗУ позволяет работать с данными в файле, как если бы это был массив MATLAB.
задает свойства m
= memmapfile(filename
,Name,Value
)m
использование одного или нескольких аргументов пары "имя-значение". Для примера можно задать формат данных в файле.
uint8
ДанныеВ командной строке создайте образец файла в текущей папке под названием records.dat
, содержащая 10 uint8
значения.
myData = uint8(1:10)'; fileID = fopen('records.dat','w'); fwrite(fileID, myData,'uint8'); fclose(fileID);
Создайте карту для records.dat
. При использовании memmapfile
формат данных по умолчанию uint8
поэтому имя файла является единственным необходимым входным параметром в этом случае.
m = memmapfile('records.dat')
m = Filename: 'd:\matlab\records.dat' Writable: false Offset: 0 Format: 'uint8' Repeat: Inf Data: 10x1 uint8 array
MATLAB отображает все records.dat
файл в память, установка всех свойств карты памяти на их значения по умолчанию. Карта памяти назначается переменной, m
. В этом примере команда отображает весь файл как последовательность беззнаковых 8-битных целых чисел и предоставляет вызывающему абоненту доступ только для чтения к его содержимому.
Просмотрите сопоставленные данные путем доступа к Data
свойство m
.
m.Data
ans = 1 2 3 4 5 6 7 8 9 10
Создайте карту памяти для данных двойной точности. Синтаксис аналогичен при указании других типов данных.
В командной строке создайте образец файла в текущей папке под названием records.dat
, содержащая 10 double
значения.
myData = (1:10)'; fileID = fopen('records.dat','w'); fwrite(fileID,myData,'double'); fclose(fileID);
Создайте карту памяти для records.dat
, и установите Format
свойство для выхода в 'double'
.
m = memmapfile('records.dat','Format','double') ;
Memmapfile, m
, содержит следующие свойства: Filename
, Writable
, Offset
, Format
, Repeat
, и Data
. Чтобы отобразить любое одно свойство, например Format
, тип m.Format
в командном окне.
m.Format
ans = 'double'
The Data
свойство содержит 10 значений двойной точности в records.dat
.
Создайте карту памяти для большого массива int32
данные. Задайте доступ к записи и nondefault Format
и Offset
значения.
В командной строке создайте образец файла в текущей папке под названием records.dat
, содержащая 10 000 int32
значения.
myData = int32([1:10000]); fileID = fopen('records.dat','w'); fwrite(fileID,myData,'int32'); fclose(fileID);
Создайте карту памяти для records.dat
, и установите Format
свойство для выхода в int32
. Также установите Offset
свойство игнорировать первые 9000 байт в файле и Writable
свойство, разрешающее доступ для записи.
m = memmapfile('records.dat',... 'Offset',9000,... 'Format','int32',... 'Writable',true);
Система координат Offset
значение 9000
указывает, что первые 9000 байтов records.dat
не сопоставлены.
Введите имя карты памяти, чтобы увидеть текущие настройки для всех свойств.
m
m = Filename: 'd:\matlab\records.dat' Writable: true Offset: 9000 Format: 'int32' Repeat: Inf Data: 7750x1 int32 array
The Format
свойство указывает, что любая операция чтения или записи, выполненная через карту памяти, считывает и записывает содержимое файла как последовательность 32-битных целых чисел со знаком. The Data
свойство содержит только 7750 элементов, поскольку первые 9000 байт records.dat
, представляющие первые 2250 значений в файле, не отображаются.
Просмотрите первые пять элементов отображенных данных путем доступа к Data
свойство m
.
m.Data(1:5)
ans = 2251 2252 2253 2254 2255
Создайте карту памяти для области файла, содержащей 100 значений двойной точности.
В командной строке создайте образец файла в текущей папке под названием mybinary.bin
, содержащего 100 значений двойной точности.
rng('default') randData = rand([100,1]); fileID = fopen('mybinary.bin','w'); fwrite(fileID,randData,'double'); fclose(fileID);
Отобразите первые 75 значений в mybinary.bin
к массиву значений двойной точности 5 на 5 на 3, на которые можно сослаться в структуре карты памяти, используя имя поля x
. Задайте эти параметры с помощью Format
аргумент пары "имя-значение".
m = memmapfile('mybinary.bin',... 'Format',{'double',[5 5 3],'x'})
m = Filename: 'd:\matlab\mybinary.bin' Writable: false Offset: 0 Format: {'double' [5 5 3] 'x'} Repeat: Inf Data: 1x1 struct array with fields: x
The Data
свойство является массивом структур, который содержит сопоставленные значения в поле, x
.
Присвойте сопоставленные данные переменной, A
. Потому что Data
свойство является массивом структур, вы должны индексировать в поле, x
, для доступа к данным.
A = m.Data.x;
Просмотр информации о A
.
whos A
Name Size Bytes Class Attributes A 5x5x3 600 double
Сопоставьте сегменты файла с различными формами массивов и типами данных с памятью.
В командной строке создайте образец файла в текущей папке под названием mybinary.bin
. Запись uint16
данные и данные двойной точности, представляющие в файл значения давления, температуры и объема выборки. В этом случае каждый из uint16
массивы 50 на 1, и массивы двойной точности 5 на 10. k
- коэффициент масштабирования расчета.
rng('default') k = 8.21; pres1 = randi([1,300],[50,1],'uint16'); temp1 = randi([1,300],[50,1],'uint16'); vol1 = double(reshape(k*temp1./pres1,5,10)); pres2 = randi([5,500],[50,1],'uint16'); temp2 = randi([5,500],[50,1],'uint16'); vol2 = double(reshape(k*temp2./pres2,5,10)); fileID = fopen('mybinary.bin','w'); fwrite(fileID,pres1,'uint16'); fwrite(fileID,temp1,'uint16'); fwrite(fileID,vol1,'double'); fwrite(fileID,pres2,'uint16'); fwrite(fileID,temp2,'uint16'); fwrite(fileID,vol2,'double'); fclose(fileID);
Сопоставьте файл с массивами, доступными по уникальным именам. Задайте поле, pressure
, содержащий массив uint16 50 на 1
значения, далее поле, temperature
, содержащая 50 на 1 uint16
значения. Задайте поле, volume
, содержащий массив 5 на 10 значений двойной точности. Используйте массив ячеек, чтобы задать формат сопоставленной области и повторить шаблон дважды.
m = memmapfile('mybinary.bin',... 'Format',{'uint16',[50 1],'pressure';... 'uint16',[50,1],'temperature';... 'double',[5,10],'volume'},'Repeat',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
The Data
свойство карты памяти, m
, является массивом структур 2 на 1, потому что Format
применяется дважды.
Скопируйте Data
свойство переменной, A
. Затем просмотрите последний блок double
данные, к которым можно получить доступ с помощью имени поля, volume
.
A = m.Data; myVolume = A(2).volume
myVolume = 2 13 32 5 5 16 4 22 3 8 2 9 53 38 13 19 23 85 2 120 29 10 6 1 2 5 6 58 20 11 7 15 4 1 5 18 1 4 14 8 9 8 4 2 0 9 8 6 3 3
filename
- Имя файла в картуИмя файла, который будет сопоставлен, включая расширение файла, заданное как вектор символов или строковый скаляр. The filename
аргумент не может включать подстановочные символы (для примера, *
или ?
).
Пример: 'myFile.dat'
Типы данных: char
| string
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
m = memmapfile('myFile.dat','Format','int32','Offset',255)
карты int32
данные в файле, myFile.dat
, в память начиная с 256-го байта.'Writable'
- Разрешение на записьfalse
(по умолчанию) | true
Разрешение на запись, заданное как true
или false
. Если вы задаете false
сопоставленная область доступна только для чтения. Если вы задаете true
сопоставленная область имеет разрешения на чтение и запись.
Пример: 'Writable',true
Типы данных: logical
'Offset'
- Расстояние от начала файлаРасстояние от начала файла до начала сопоставленной области, заданное как неотрицательное целое число. Это значение основано на нуле, значение 0 представляет начало файла.
Пример: 'Offset',1024
Типы данных: double
'Format'
- Формат отображаемой области'uint8'
(по умолчанию) | вектор символов | строковый скаляр | n
массив ячеек -by-3Формат отображаемой области, заданный как вектор символов, строковый скаляр или n
-by-3 массив ячеек.
Если область, которую вы отображаете, содержит данные только одного типа, задайте значение Format как вектор символов или строковый скаляр, идентифицирующий тип. Например, если ваши данные состоят только из 16-битных целых чисел со знаком, задайте 'int16'
. При задании Format
можно использовать любой из следующих типов данных значение:
'int8'
'int16'
'int32'
'int64'
'uint8'
'uint16'
'uint32'
'uint64'
'single'
'double'
Если область, которую вы сопоставляете, требует, чтобы вы задали форму массива к данным в отображаемом файле, а также имя поля для ссылки на этот массив, задайте Format
значение как массив ячеек 1 на 3.
Первая камера значение, заданное как вектор символов или строковый скаляр, присваивает тип данных, применяемый к сопоставленной области.
Второе значение камеры, заданное как массив 1 на n, присваивает измерения массива, применяемые к сопоставленной области.
Третья камера значение, заданное как вектор символов или строковый скаляр, присваивает имя поля, используемое в Data
массив структур карты памяти. Для примера, {'uint64',[30 4 10],'x'}
Если область, которую вы отображаете, состоит из сегментов различных типов данных или форм массива, можно задать формат каждого сегмента, используя строки массива ячеек n на 3. Для примера, {'uint64',[30 4 10],'x'; 'uint32',[30 4 6],'y'}
Типы данных: char
| string
| cell
'Repeat'
- Количество раз применять Format
параметрInf
(по умолчанию) | положительное целое числоКоличество раз, чтобы применить Format
параметр для отображаемой области, заданный как Inf
или положительное целое число. Если вы задаете Inf
, memmapfile
применяет Format
параметр до конца файла.
Пример: 'Repeat',2000
Типы данных: double
m
- Карта памятиmemmapfile
объектКарта памяти, возвращенная как memmapfile
объект со следующими свойствами.
Свойство | Описание |
---|---|
| Путь и имя отображаемого файла |
| Тип доступа, разрешенный для сопоставленной области |
| Количество байтов от начала файла до начала сопоставленной области |
| Формат содержимого сопоставленной области, включая тип данных, размер массива и имя поля, с помощью которого можно получить доступ к данным |
| Количество раз, чтобы применить шаблон, заданный Format свойство для сопоставленной области файла |
| Данные из файла, сопоставленные с памятью. Data может быть числовым массивом или массивом структур с именами полей, заданными в Format свойство |
Значения для любого свойства (кроме Data
) устанавливаются в то время, когда вы вызываете memmapfile
, с использованием аргументов пары "имя-значение".
Доступ к любому свойству m
с записью через точку, подобной доступу к полям массива структур. Например, для доступа к сопоставленным с памятью данным в Data
выполните одно из следующих действий:
Если Data
является числовым массивом, вызов m.Data
.
Если Data
является скалярным (1 на 1) массивом структур, вызов данные.
, где fieldname
fieldname
- имя поля.
Если Data
является нескалярным массивом структур, вызов данные
где (index
). fieldname
index
- индекс для элемента в массиве структур, и fieldname
- имя поля. Например, для доступа к файловым данным в temperature
поле первого элемента Data
, вызов m.Data(1).temperature
.
После создания карты памяти m
, можно изменить значение любого из его свойств, кроме Data
. Чтобы назначить новое значение, используйте запись через точку. Для примера задать новую Offset
значение для m
, тип:
m.Offset = 2048;
Можно сопоставить только существующий файл. Вы не можете создать новый файл и сопоставить этот файл с памятью за одну операцию. Используйте функции ввода-вывода файла MATLAB, чтобы создать файл, прежде чем пытаться сопоставить его с памятью.
После memmapfile
определяет местоположение файла, MATLAB хранит абсолютный путь файла внутренне, а затем использует этот сохраненный путь, чтобы найти файл с этой точки. В результате можно работать в других каталогах вне текущей рабочей директории и сохранить доступ к отображаемому файлу.
memmapfile
не расширяется и не добавляется к отображаемому файлу. Используйте вместо этого стандартные функции ввода-вывода файлов, такие как fopen
и fwrite
.
Фактическое отображение файла с адресным пространством MATLAB не происходит при построении memmapfile
объект. Карта памяти, основанная на информации, хранящейся в настоящее время в сопоставленном объекте, генерируется при первой ссылке или изменении Data
свойство для этого объекта.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.