查看: 5720|回复: 3|关注: 0

[我分享] Matlab中如何快速写二进制文件?

[复制链接]

MATLAB 基础讨论
版块优秀回答者

入门

326 麦片

财富积分


50500


9

主题

914

帖子

69

最佳答案
  • 关注者: 25
发表于 2014-4-5 22:05:27 | 显示全部楼层 |阅读模式
奥秘就在于fopen的选项用'w'还是用'W'。如果用大写的'W'表示fwrite写入时启动缓存功能,不立即将数据写入硬盘;如果采用小写'w'表示fwrite调用结束后立即将数据写入硬盘。当不断写入小数据时,采用'w'选项效率非常低,如果改用'W'选项,可以大大提高数据写入效率。
(1) 测试实例
%Test the speed of fwrite in different mode
%
TestDir = '请自己设定一个临时目录';
filename1 = fullfile(TestDir,'test1.dat');
filename2 = fullfile(TestDir,'test2.dat');
data = rand(1,1000);
databytes = length(data(:))*8;
filesize = 1*1000*1000*1000;0MBytes
nWrite = ceil(filesize/databytes);
tic;
fid = fopen(filename1,'W');
for kk = 1:nWrite
    fwrite(fid,data,'double');
end
fclose(fid);
dur1 = toc;

tic;
fid = fopen(filename2,'w');
for kk = 1:nWrite
    fwrite(fid,data,'double');
end
fclose(fid);
dur2 = toc;
disp(['time diff:','W:',num2str(dur1),'seconds,','w:',num2str(dur2),'seconds.']);

delete(filename1);
delete(filename2);
(2) 测试结果
>> file_ex_1
time diff:W:2.1396seconds,w:14.5403seconds.
关注新浪微博:书生一文; 微信:matlabfans; 获取MATLAB混编,文件与数据接口,并行技术图书答疑和最新资料
回复主题 已获打赏: 0 积分

举报

新手

5 麦片

财富积分


050


3

主题

9

帖子

0

最佳答案
发表于 2014-12-31 21:29:27 | 显示全部楼层
谢谢  刘老师 不知道有没有快速读的方法:D
回复此楼 已获打赏: 0 积分

举报

新手

10 麦片

财富积分


050


0

主题

4

帖子

0

最佳答案
发表于 2017-3-9 23:51:18 | 显示全部楼层
老师您好,由于我还没有权限发帖,所以将我的问题写在此处,期待您的答复。
书中第142页的图5-4 BMP文件的十六进制显示实例,为什么在最后一行还要多补两个字节的零(offset 135,136)?
回复此楼 已获打赏: 0 积分

举报

新手

10 麦片

财富积分


050


0

主题

4

帖子

0

最佳答案
发表于 2017-3-10 00:38:52 | 显示全部楼层
即图中最后一行:7D 69 E4 7D 69 00 00 00 中最后两个字节的00 00。倒数第3个字节的00是为了能被4整除而补的。

另外,程序5-1,适用于图像中一行的字节数为4的整数倍的情况。例如:图5-9中的图像中,一行是800个像素,800像素*3字节=2400字节。对于一行像素数为799,949像素,等等的情况,使用该程序时,图像显示错位。所以程序需要在fread函数中加几句。

有些书中指出,BMP图像一行的字节数可以通过这个公式计算:①(biwidth*biBitCount)/8+4;或者②(biwidth*biBitCount+31)/32*4 (biwidht:BMP图像一行的像素数,biBitCount一个像素占用的bit位数)。举一个例子:对于一行有949像素的24位图像,使用公式①算出的结果为2851个字节,使用公式②算出的结果为2850.875,向上取整后得到2851个字节,与公式①算出的结果相等。但是,实际上是949 像素*3 字节=2847 字节,为了能够被4整除,只需要补一个字节的零即可,即一行的字节数为2847+1=2848 个字节,而不是公式①和②算出来的结果,如何解释这个问题?公式①和②是否正确,是如何推导出来的?
回复此楼 已获打赏: 0 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

快速回复 返回顶部 返回列表