Main Content

fread

读取二进制文件中的数据

说明

示例

A = fread(fileID) 将打开的二进制文件中的数据读取到列向量 A 中,并将文件指针定位在文件结尾标记处。该二进制文件由文件标识符 fileID 指示。使用 fopen 可打开文件并获取 fileID 值。读取文件后,请调用 fclose(fileID) 来关闭文件。

A = fread(fileID,sizeA) 将文件数据读取到维度为 sizeA 的数组 A 中,并将文件指针定位到最后读取的值之后。fread 按列顺序填充 A

示例

A = fread(fileID,precision) 根据 precision 描述的格式和大小解释文件中的值。

示例

A = fread(fileID,sizeA,precision) 将文件数据读取到维度为 sizeA 的数组 A 中,并将文件指针定位到最后读取的值之后。fread 按列顺序填充 A。根据 precision 描述的格式和大小解释文件中的值。

示例

A = fread(___,skip) 在读取文件中的每个值之后将跳过 skip 指定的字节或位数。

示例

A = fread(___,machinefmt) 另外指定在文件中读取字节或位时的顺序。

[A,count] = fread(___) 还将返回 fread 读取到 A 中的字符数。您可将此语法与上述语法中的任何输入参量一起使用。

示例

全部折叠

将一个九元素向量写入到示例文件 nine.bin 中。

fileID = fopen('nine.bin','w');
fwrite(fileID,[1:9]);
fclose(fileID);

将文件中的所有数据读取到 double 类的向量中。默认情况下,fread 一次读取文件中的 1 个字节,将每个字节解释为一个 8 位无符号整数 (uint8),并返回一个 double 数组。

fileID = fopen('nine.bin');
A = fread(fileID)
A = 9×1

     1
     2
     3
     4
     5
     6
     7
     8
     9

fread 返回一个列向量,文件中的每个字节对应一个元素。

查看 A 的相关信息。

whos A
  Name      Size            Bytes  Class     Attributes

  A         9x1                72  double              

关闭文件。

fclose(fileID);

创建一个名为 doubledata.bin 并且包含九个双精度值的文件。

fileID = fopen('doubledata.bin','w');
fwrite(fileID,magic(3),'double');
fclose(fileID);

打开文件 doubledata.bin,并将文件中的数据读取到一个 3×3 数组 A。指定源数据为 double 类。

fileID = fopen('doubledata.bin');
A = fread(fileID,[3 3],'double')
A = 3×3

     8     1     6
     3     5     7
     4     9     2

关闭文件。

fclose(fileID);

创建一个名为 nine.bin 并且包含 1 - 9 中的值的文件。以 uint16 值形式写入数据。

fileID = fopen('nine.bin','w');
fwrite(fileID,[1:9],'uint16');
fclose(fileID);

将前六个值读取到一个 3×2 数组中。指定源数据为 uint16 类。

fileID = fopen('nine.bin');
A = fread(fileID,[3,2],'uint16')
A = 3×2

     1     4
     2     5
     3     6

fread 返回使用文件 nine.bin 中的前六个值逐列填充的一个数组。

返回到文件的开头。

frewind(fileID)

一次读取两个值,并在读取下一个值之前跳过一个值。使用 precision'2*uint16' 指定此格式。因为数据为 uint16 类,所以一个值由 2 个字节表示。因此,将 skip 参量指定为 2

precision = '2*uint16';
skip = 2;
B = fread(fileID,[2,3],precision,skip)
B = 2×3

     1     4     7
     2     5     8

fread 返回使用 nine.bin 中的值逐列填充的一个 2×3 数组。

关闭文件。

fclose(fileID);

创建一个包含二进制编码十进制 (BCD) 值的文件。

str = ['AB'; 'CD'; 'EF'; 'FA'];

fileID = fopen('bcd.bin','w');
fwrite(fileID,hex2dec(str),'ubit8');
fclose(fileID);

一次读取 1 个字节。

fileID = fopen('bcd.bin');
onebyte = fread(fileID,4,'*ubit8');

显示 BCD 值。

disp(dec2hex(onebyte))
AB
CD
EF
FA

使用 frewind 返回到文件的开头。如果在 little-endian 系统上一次读取 4 位数,则结果将以错误顺序显示。

frewind(fileID)

err = fread(fileID,8,'*ubit4');
disp(dec2hex(err))
B
A
D
C
F
E
A
F

使用 frewind 返回到文件的开头。与之前一样一次读取数据的 4 位,但指定 big-endian 排序以显示正确的结果。

frewind(fileID)

correct = fread(fileID,8,'*ubit4','ieee-be');
disp(dec2hex(correct))
A
B
C
D
E
F
F
A

关闭文件。

fclose(fileID);

输入参数

全部折叠

已打开二进制文件的文件标识符,指定为整数。使用 fread 读取文件之前,您必须使用 fopen 打开文件并获取 fileID

数据类型: double

输出数组 A 的维度,指定为 Inf、整数或一个二元素行向量。

sizeA 输入的格式输出数组 A 的维度。
Inf列向量,其中的每个元素包含文件中的一个值。
n具有 n 个元素的列向量。
[m,n]m×n 矩阵,按列顺序填充。n 可以为 Inf,但 m 不能为该值。

要读取的值的类和大小(以位为单位),以下列形式之一指定为字符向量或字符串标量。(可选)输入可指定输出矩阵 A 的类。

precision 输入的格式描述
source输入值属于 source 指定的类。输出矩阵 A 为类 double
示例:'int16'
source=>output输入值属于 source 指定的类。输出矩阵 A 的类由 output 指定。
示例:'int8=>char'
*source输入值和输出矩阵 A 属于 source 指定的类。对于 bitnubitn 精度,输出具有可包含输入的最小类。
示例:'*ubit18'
这等同于 'ubit18=>uint32'

N*source
N*source=>output

在跳过 skip 参量指定的字节数之前读取 N 值。
例如:'4*int8'

下表显示了 sourceoutput 的可能值。

值类型精度位(字节)

无符号整数

'uint'

32 (4)

'uint8'

8 (1)

'uint16'

16 (2)

'uint32'

32 (4)

'uint64'

64 (8)

'uchar'

8 (1)

'unsigned char'

8 (1)

'ushort'

16 (2)

'ulong'

32 (4)

'ubitn'

1n64

有符号整数

'int'

32 (4)

'int8'

8 (1)

'int16'

16 (2)

'int32'

32 (4)

'int64'

64 (8)

'integer*1'

8 (1)

'integer*2'

16 (2)

'integer*4'

32 (4)

'integer*8'

64 (8)

'schar'

8 (1)

'signed char'

8 (1)

'short'

16 (2)

'long'

32 (4)

'bitn'

1n64

浮点数

'single'

32 (4)

'double'

64 (8)

'float'

32 (4)

'float32'

32 (4)

'float64'

64 (8)

'real*4'

32 (4)

'real*8'

64 (8)

字符

'char*1'

8 (1)

'char'

MATLAB® char 类型不是固定大小,字节数取决于与文件关联的编码方案。使用 fopen 设置编码。

对于 source 的大多数值,如果 fread 在读取完整值之前达到文件的末尾,则不会返回最终值的结果。但是,如果 sourcebitnubitn,则 fread 将返回最后一个值的部分结果。

注意

要在 MATLAB 中保留 NaNInf 值,请读取和写入 doublesingle 类的数据。

数据类型: char | string

读取每个值之后要跳过的字节数,指定为标量。如果将 precision 指定为 bitnubitn,请以位为单位指定 skip

使用 skip 参量从固定长度记录的非连续字段中读取数据。

读取文件中的字节的顺序,指定为字符向量或字符串标量。将 machinefmt 指定为下表中列出的值之一。对于 bitnubitn 精度,machinefmt 指定字节中位的读取顺序,而字节的读取顺序仍与系统字节顺序相同。

'n''native'

系统字节排序方式(默认)

'b''ieee-be'

Big-endian 排序

'l''ieee-le'

Little-endian 排序

's''ieee-be.l64'

Big-endian 排序,64 位长数据类型

'a''ieee-le.l64'

Little-endian 排序,64 位长数据类型

默认情况下,当前支持的所有平台都使用 little-endian 排序方式对新文件进行排序。现有二进制文件可以使用 big-endian 或 little-endian 排序方式。

数据类型: char | string

输出参量

全部折叠

文件数据,以列向量形式返回。如果指定 sizeA 参量,则 A 是指定大小的矩阵。A 中的数据为类 double,除非在 precision 参量中指定不同的类。

读取的字符数,以标量值形式返回。

扩展功能

版本历史记录

在 R2006a 之前推出

全部展开