MATLAB fread()和fwrite()读写二进制文件(附带实例)
磁盘用固定的字节数保存包括整数在内的二进制数据。例如,以二进制格式存储 0~40 亿的任何一个数,如 1、1000 或 1000000,每个数字占用 4 个字节的空间。
二进制文件可用来保存数值数据并访问文件中的指定数字,或随机访问文件中的数字。与人可识别的文本文件不同,二进制文件只能通过机器读取。二进制文件是存储数据最为紧凑和快速的格式。在二进制文件中可使用多种数据类型,但这种情况并不常见。
二进制文件占用较少的磁盘空间,且存储和读取数据时无须在文本表示与数据之间进行转换,因此二进制文件效率更高。二进制文件可在 1 字节磁盘空间上表示 256 个值。除扩展精度和复数外,二进制文件中含有数据在内存中存储格式的映像。因为二进制文件的存储格式与数据在内存中的格式一致,无须转换,所以读取文件的速度更快。
文本文件和二进制文件均为字节流文件,以字符或字节的序列对数据进行存储。
文件 I/O 函数可在二进制文件中进行读取、写入操作。如需在文件中读写数字数据,或创建在多个操作系统上使用的文本文件,可考虑用二进制文件函数。
fread() 函数的调用格式及说明如下表所示:
fwrite() 函数的调用格式及说明如下表所示:
【实例 1】创建全 1 矩阵文件。在 MATLAB 命令行窗口中输入如下命令:
【实例 2】写入二进制文件。在 MATLAB 命令行窗口中输入如下命令:
二进制文件可用来保存数值数据并访问文件中的指定数字,或随机访问文件中的数字。与人可识别的文本文件不同,二进制文件只能通过机器读取。二进制文件是存储数据最为紧凑和快速的格式。在二进制文件中可使用多种数据类型,但这种情况并不常见。
二进制文件占用较少的磁盘空间,且存储和读取数据时无须在文本表示与数据之间进行转换,因此二进制文件效率更高。二进制文件可在 1 字节磁盘空间上表示 256 个值。除扩展精度和复数外,二进制文件中含有数据在内存中存储格式的映像。因为二进制文件的存储格式与数据在内存中的格式一致,无须转换,所以读取文件的速度更快。
文本文件和二进制文件均为字节流文件,以字符或字节的序列对数据进行存储。
文件 I/O 函数可在二进制文件中进行读取、写入操作。如需在文件中读写数字数据,或创建在多个操作系统上使用的文本文件,可考虑用二进制文件函数。
MATLAB读二进制文件
在 MATLAB 中,使用 fread() 函数读取二进制文件中的数据。fread() 函数的调用格式及说明如下表所示:
调用格式 | 说明 |
---|---|
A = fread(fileID) | 将打开的二进制文件中的数据读取到列向量 A 中,并将文件指针定位在文件结尾标记处 |
A = fread(fileID,sizeA) | 将文件数据读取到维度为 sizeA 的数组 A 中,并将文件指针定位到最后读取的值之后 |
A = fread(fileID,sizeA,precision) | 根据 precision 描述的格式和大小解释文件中的值 |
A = fread(fileID,sizeA,precision,skip) | 在读取文件中的每个值之后将跳过 skip 指定的字节或位数 |
A = fread(fileID,sizeA,precision,skip,machinefmt) | 另外指定在文件中读取字节或位时的顺序 |
[A,count] = fread(...) | 返回 fread 读取到 A 中的字符数 |
MATLAB写二进制文件
在 MATLAB 中,使用 fwrite() 函数将数据写入二进制文件。fwrite() 函数的调用格式及说明如下表所示:
调用格式 | 说明 |
---|---|
fwrite(fileID,A) | 将数组 A 的元素按列顺序以 8 位无符号整数的形式写入一个二进制文件 |
fwrite(fileID,A,precision) | 按照 precision 说明的形式和大小写入 A 中的值 |
fwrite(fileID,A,precision,skip) | 在写入每个值之前跳过 skip 指定的字节数或位数 |
fwrite(fileID,A,precision,skip,machinefmt) | 指定将字节或位写入文件的顺序 |
count = fwrite(A) | 返回 A 中 fwrite 已成功写入文件的元素数 |
【实例 1】创建全 1 矩阵文件。在 MATLAB 命令行窗口中输入如下命令:
>> close all % 关闭当前已打开的文件 >> clear % 清除工作区的变量 >> fileID = fopen('doubledata.bin','w'); % 创建一个名为 doubledata.bin的文件 >> fwrite(fileID,ones(3),'double'); % 添加3阶全1矩阵数据 >> fclose('all'); % 关闭文件 >> fileID = fopen('doubledata.bin'); % 打开文件 >> A = fread(fileID,[3 3],'double') % 将文件中的数据读取到 3×3 数组 A A = 1 1 1 1 1 1 1 1 1 >> fclose('all'); % 关闭文件
【实例 2】写入二进制文件。在 MATLAB 命令行窗口中输入如下命令:
>> close all % 关闭当前已打开的文件 >> clear % 清除工作区的变量 >> fileID = fopen('uint8.bin','w'); % 创建并打开名称为uint8.bin 的文件 >> fwrite(fileID,[1:9]); % 将从1~9的整数以8位无符号整数的形式写入 >> fwrite(fileID,magic(5),'integer*4'); % 在文件中添加5阶魔方矩阵数据 >> fprintf(fileID,'%6s\r\n','%将 uint8 数据写入二进制文件'); % 将数据写入文本文件 >> fclose(fileID); % 关闭文件