Создайте карту распределения памяти к файлу
сопоставляет существующий файл, 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
формат
повторение
, и 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
свойство игнорировать первые 9 000 байтов в файле и Writable
свойство разрешить доступ для записи.
m = memmapfile('records.dat',... 'Offset',9000,... 'Format','int32',... 'Writable',true);
Offset
значение 9000
указывает что первые 9 000 байтов records.dat
не сопоставлены.
Введите имя карты распределения памяти, чтобы видеть текущие настройки для всех свойств.
m
m = Filename: 'd:\matlab\records.dat' Writable: true Offset: 9000 Format: 'int32' Repeat: Inf Data: 7750x1 int32 array
Format
свойство указывает, что любая операция чтения или операция записи, сделанная с помощью карты распределения памяти, читают и пишут содержимое файла как последовательность 32-битных целых чисел со знаком. Data
свойство содержит только 7 750 элементов потому что первые 9 000 байтов records.dat
, представление первых 2 250 значений в файле, не сопоставлены.
Просмотрите первые пять элементов сопоставленных данных путем доступа к 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 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
, содержа 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 3
filename
— Имя файла, чтобы сопоставитьИмя файла, чтобы сопоставить включая расширение файла в виде вектора символов или строкового скаляра. 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
Типы данных: логический
'Offset'
— Расстояние от запуска файлаРасстояние от запуска файла, чтобы запуститься сопоставленной области в виде неотрицательного целого числа. Это значение основано на нуле, значение 0 представляет запуск файла.
Пример: 'Offset',1024
Типы данных: double
'Format'
— Формат сопоставленной области'uint8'
(значение по умолчанию) | вектор символов | строковый скаляр | n
- 3 массива ячеекФормат сопоставленной области в виде вектора символов, строкового скаляра или n
- 3 массива ячеек.
Если область, которую вы сопоставляете, содержит данные только одного типа, задайте значение Формата как вектор символов или строковый скаляр, идентифицирующий тип. Например, если ваши данные состоят только из 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), вызовите m. Данные.
, где fieldname
имя поля.
Если Data
нескалярный массив структур, вызовите m. Данные (
где 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.