matlab - Matlab中通过fread读取多个精度二进制文件

标签 matlab file-io binary binaryfiles

我有一个巨大的二进制文件,其中包含多个精度的记录 {'Double','Double', 'Int32'、'Int8'、'字符'}。我已经使用 memmapfile 读取数据,但读取数据的速度非常慢。有没有办法通过fread读取整个文件?

最佳答案

您可以使用 FREAD'skip' 选项功能以及FSEEK一次读取一个“列”的记录:

%# type and size in byte of the record fields
recordType = {'double' 'double' 'int32' 'int8' 'char'};
recordLen = [8 8 4 1 1];
R = cell(1,numel(recordType));

%# read column-by-column
fid = fopen('file.bin','rb');
for i=1:numel(recordType)
    %# seek to the first field of the first record
    fseek(fid, sum(recordLen(1:i-1)), 'bof');

    %# % read column with specified format, skipping required number of bytes
    R{i} = fread(fid, Inf, ['*' recordType{i}], sum(recordLen)-recordLen(i));
end
fclose(fid);

此代码通常适用于任何二进制记录文件,您只需指定记录字段的数据类型和字节长度。结果将在包含列的元胞数组中返回。

关于matlab - Matlab中通过fread读取多个精度二进制文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8096702/

相关文章:

python - 是否可以将经过训练的 CNN 存储为 .mat 文件并使用该文件在 Python 中制定分类算法?

matlab - 平均依赖于另一行中的字符串的单元格数组的一行

C#:添加到文件开头

c# - 文件锁定 - 在锁定时读取然后写入

java - 使用 try-finally block 处理输入流有什么好处?

string - Erlang 如何从这个二进制文件 <<"a,b,c">> 中创建一个列表

c - 如何在C中获得字符的8位二进制表示?

Matlab 输出 - 空格填充?

Python:是否可以以 MATLAB 风格对矩阵进行插值?

c++ - cpp 快速访问磁盘上的二进制数据