Создание карты памяти для файла
сопоставляет существующий файл, 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 arrayMATLAB отображает всю 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') ;
Меммапфайл, m, содержит следующие свойства: Filename, Writable, Offset, Format, Repeat, и Data. Отображение любого свойства, например Format, тип m.Format в окне команд.
m.Format
ans = 'double'
Data свойство содержит 10 значений двойной точности в records.dat.
Создание карты памяти для большого массива int32 данные. Укажите доступ для записи и значение по умолчанию 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 Format свойство указывает, что любая операция чтения или записи, выполняемая через карту памяти, считывает и записывает содержимое файла как последовательность подписанных 32-битных целых чисел. 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 Data свойство является массивом структуры, который содержит сопоставленные значения в поле, x.
Назначьте сопоставленные данные переменной, A. Потому что Data свойство является массивом структуры, необходимо индексировать в поле, x, для доступа к данным.
A = m.Data.x;
Просмотр сведений о A.
whos AName 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, содержащий массив 50 на 1 uint16 значения, за которыми следует поле, 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 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 3filename - Имя файла для сопоставленияИмя файла для сопоставления, включая расширение файла, указанное как вектор символов или строковый скаляр. 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-by-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), вызов m.Data., где fieldnamefieldname - имя поля.
Если Data является нескалярным массивом структуры, вызов m.Data( где index).fieldnameindex является индексом для элемента в массиве структуры, и 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.